當時年輕的我在作項目時遇到的坑2

關於models中Date數據類型與Datetime數據類型在前端的過濾

這篇博客總結的挺全:http://www.javashuo.com/article/p-qsvmwpav-dq.htmlhtml

將datetime與date類型的數據統一轉換爲str類型的類

import json
from datetime import datetime
from datetime import date

#對含有日期格式數據的json數據進行轉換
class JsonCustomEncoder(json.JSONEncoder):
    def default(self, field):
        if isinstance(field,datetime):
            return field.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(field,date):
            return field.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self,field)


d1 = datetime.now()

dd = json.dumps(d1,cls=JsonCustomEncoder)
print(dd)

拓展Django自帶的user表時報錯

應用customer的models中UserInfo類是這樣寫的:前端

from django.db import models
from django.contrib.auth.models import AbstractUser

#CRM系統的用戶表——拓展Django的user表
class UserInfo(AbstractUser):
    # null=True,blank=True~~寫在一塊兒,第一個是在數據庫中約束的,第二個是在作認證的時候約束的
    telephone = models.CharField(max_length=32,null=True,blank=True)

而後在全局文件的__init__.py文件中加上pymysql相關的代碼:python

import pymysql
pymysql.install_as_MySQLdb()

可是我在運行數據庫同步的命令時:mysql

python3 manage.py makemigrations

遇到了下面的錯誤:git

auth.User.groups: (fields.E304) Reverse accessor for ‘User.groups’ clashes with reverse accessor for ‘User.groups’.
HINT: Add or change a related_name argument to the definition for ‘User.groups’ or ‘User.groups’.
auth.User.user_permissions: (fields.E304) Reverse accessor for ‘User.user_permissions’ clashes with reverse accessor for ‘User.user_permissions’.
HINT: Add or change a related_name argument to the definition for ‘User.user_permissions’ or ‘User.user_permissions’.
users.User.groups: (fields.E304) Reverse accessor for ‘User.groups’ clashes with reverse accessor for ‘User.groups’.
HINT: Add or change a related_name argument to the definition for ‘User.groups’ or ‘User.groups’.
users.User.head_url: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.python.org/pypi/Pillow or run command 「pip install Pillow」.
users.User.user_permissions: (fields.E304) Reverse accessor for ‘User.user_permissions’ clashes with reverse accessor for ‘User.user_permissions’.
HINT: Add or change a related_name argument to the definition for ‘User.user_permissions’ or ‘User.user_permissions’.

錯誤的解決方案是:web

須要在setting中重載AUTH_USER_MODELsql

# 擴展Django的user表時須要重載AUTH_USER_MODEL
AUTH_USER_MODEL = 'customer.UserInfo'

customer:個人應用的名稱數據庫

UserInfo:model中拓展user的類django

接下來再運行數據庫同步命令就沒問題了~json

pyhton3 manage.py makemigrations
python3 manage.py migrate

Django中models.ManyToManyField添加null=True參數遇到的一個警告

在維護以前的CRM系統時遇到過這個問題,當時沒怎麼關注,如今再作別的系統的時候又遇到了,通過向大佬請教才明白原理。

我如今有兩張表:客戶表Customer與課程表ClassList,兩者是多對多的關係,在Customer中創建關聯字段:

class_list = models.ManyToManyField('ClassList',verbose_name='已報班級',null=True,blank=True)

注意我這裏設置了null=True。而後在同步數據庫的時候Pycharm給我上了一個Warring:

說明以下:

  對於ManyToManyField來講,class_list這個字段其實只是一個操做第三張表的一個屬性,ORM會自動生成第三張表去展現Customer表與ClassList表的關係,第三張表實際上不填數據也能夠!所以給class_list設置null=true無效的,Django不會識別這個屬性!

在外部文件中調用Django環境

# -*- coding:utf-8 -*-
import os import random
import string

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "whwCRM.settings")
    import django django.setup() from customer import models
    lst = []
    for i in range(1,20):
        obj = models.Customer(
            qq=''.join(random.choices(string.digits,k=11)),
            name = ''.join(random.choices(string.ascii_letters+string.digits,k=5)),
            sex = random.choice(['male','female']),
            source=random.choice(['qq','referral','website']),
            course=random.choice(['LinuxL', 'PythonFullStack']),
        )
        lst.append(obj)
    models.Customer.objects.bulk_create(lst)

時間格式越限的問題

在作項目測試過程當中,在模板渲染的時候上報了這樣的錯誤:

根據瀏覽器的提示發現是在模版渲染的過程當中發上的錯誤~~

最後發現出現問題的緣由是:手動往Django自帶的Sqllit數據庫插入數據的時候,對於Date及Datetime格式的數據,這個數據庫會把日期格式的數據轉譯成int格式的數據,在模板渲染的過程當中,這個數據超出了signed int的最大範圍,因此會上報上面的錯誤~

暫時的解決方案是:

一、在models中定義這個字段的時候能夠設置一下:null=True,blank=True~手動錄入數據時能夠不用輸入這兩個數據~~

二、或者能夠利用程序往數據庫中插入時間格式的數據~用程序插入的數據是時間格式的~在模版渲染的過程當中不會出錯。

至於緣由:我的認爲是數據庫自己的問題~錄入的時候數據不顯示成日期格式的話確實仍是很麻煩的~

Django的app註冊時遇到的坑

通常狀況下,若是咱們不用應用中的apps.py文件的話,在settings中註冊app能夠直接寫app的包的名字:

可是最近在作一個stark組件的demo的時候發現一個問題:實現「在路由分發前加載某些py文件」的功能的時候,若是按照上面的這種方式註冊app的話程序並不會執行相應app中的py文件!

所以,正確註冊app應用的方式應該是這樣的:

因此,平時要養成習慣!按照標準的方法去註冊app!!!

django時間與系統時間相差8小時問題

django的配置文件settings中,以前有兩個全局變量:TIME_ZONE 與USE_TZ 把這兩個值改一下:

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False                          -------------這句話,若是已經存在了,就須要把USE_TZ改爲USE_TZ=False

相關文章
相關標籤/搜索