- 在项目文件夹下新建pathon包,取名为db,存放抽象模型类(模型的Meta类里添加abstract=True元数据项,就可以将一个模型转换为抽象基类。Django不会为这种类创建实际的数据库表,它们也没有管理器,不能被实例化也无法直接保存,它们就是用来被继承的。)。
- 在db包内创建抽象模型类:
from django.db import models
class BaseModel(models.Model):
create_time = models.DateTimeField(auto_now_add=True, verbose_name='CreatedTime')
update_time = models.DateTimeField(auto_now=True, verbose_name='UpdatedTime')
is_delete = models.BooleanField(default=False, verbose_name="DeletedTime")
class Meta:
abstract =True
- 在apps包内的models.py编写模型类。
- 在编写过程中如果需要用到富文本框,需要在shell里安装
pip install django-tinymce
然后在项目文件夹里的settings.py注册应用名的参数里把tinymce当成应用名添加进去。
接着在models.py中导入就可以用了
from tinymce.models import HTMLField
模型导入错误总结:
a) https://www.cnblogs.com/noplablem-wangzhe0635/p/10021652.html 中的1,4和5
4.ImportError: No module named ‘PIL’(pillow可用于验证码)
C:\Users\zte>pip3 install pillow
Collecting pillow
Using cached
https://files.pythonhosted.org/packages/b9/ba/43f2f2dd60f304d8563af82ecd4822ff0b57ddfd71631c407fce69da84d1/Pillow-5.4.1-cp35-cp35m-win_amd64.whl
Installing collected packages: pillow
Successfully installed pillow-5.4.1
5.Django继承AbstractUser新建User Model时出现fields.E304错误
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’.
解决方案:
需要在setting中重载AUTH_USER_MODEL
AUTH_USER_MODEL = ‘users.UserProfile’
users:你的app
UserProfile:model
b) https://code.djangoproject.com/ticket/28691 在应用文件夹下的urls.py 需要加上app_name
c) 在引用外键的时候,新版本需要指明on_delete的值,因为我用的是models.SET_NULL,所以需要同时指定允许值为空null=True。又因为存在多表引用同一个表的关系(多个一对多的表),所以需要指定唯一的related_name。在一对多查询时可以用到这个属性。
class Address(BaseModel):
'''地址模型类'''
user1 = models.ForeignKey('User',related_name='user_address_user', null=True, on_delete=models.SET_NULL,verbose_name='所属账户')