这篇博客总结的挺全: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