這篇博客總結的挺全:http://www.javashuo.com/article/p-qsvmwpav-dq.htmlhtml
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)
應用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
在維護以前的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不會識別這個屬性!
# -*- 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~手動錄入數據時能夠不用輸入這兩個數據~~
二、或者能夠利用程序往數據庫中插入時間格式的數據~用程序插入的數據是時間格式的~在模版渲染的過程當中不會出錯。
至於緣由:我的認爲是數據庫自己的問題~錄入的時候數據不顯示成日期格式的話確實仍是很麻煩的~
通常狀況下,若是咱們不用應用中的apps.py文件的話,在settings中註冊app能夠直接寫app的包的名字:
可是最近在作一個stark組件的demo的時候發現一個問題:實現「在路由分發前加載某些py文件」的功能的時候,若是按照上面的這種方式註冊app的話程序並不會執行相應app中的py文件!
所以,正確註冊app應用的方式應該是這樣的:
因此,平時要養成習慣!按照標準的方法去註冊app!!!
django的配置文件settings中,以前有兩個全局變量:TIME_ZONE 與USE_TZ 把這兩個值改一下:
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False -------------這句話,若是已經存在了,就須要把USE_TZ改爲USE_TZ=False