基表的作用(继承)
class BaseModel(models.Model): create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) is_delete = models.BooleanField(verbose_name='是否删除', default=False) class Meta: abstract = True # 有该属性的Model类不会完成数据库迁移产生一张表 class Publish(BaseModel): name = models.CharField(verbose_name='出版社名', max_length=32) address = models.CharField(verbose_name='地址', max_length=64) phone = models.CharField(verbose_name='电话', max_length=32)
配置media静态文件(图片路径)
settings.py: MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') models.py: class Author(BaseModel): name = models.CharField(verbose_name='作者名', max_length=32) icon = models.FileField(upload_to='icon', default='icon/icon.jpg') #传入路径和默认路径 telephone = models.CharField(verbose_name='电话', max_length=32) 其他模型类中自定义显示字段: @property def author_detail_list(self): author_detail_arr = [] for author in self.authors.all(): author_dic = {} author_dic['icon'] = settings.MEDIA_URL + str(author.icon) # author.icon是对象类型,不能序列化 author_detail_arr.append(author_dic) return author_detail_arr
模型表的外键字段处理方法
外键处理: 1.反向查询:related_name='xxx' 2.表关系(db_constraint + on_delete ): db_constraint=False 数据库断开关联 ,也就是操作数据库时不进行逻辑判断,但用orm逻辑判断操作数据库 on_delete=models.CASCADE 级联删除,多对多表不需要写,因为默认级联删除 on_delete=models.SET_NULL, null=True 删除时,外键字段为为空 on_delete=models.SET_DEFAULT, default=0 删除时,外键字段为0 on_delete=models.DO_NOTHING 删除时,外键字段不处理
案例:class AuthorDetail(BaseModel): CHOICE_SEX = ( (0, '男'), (1, '女') ) age = models.IntegerField(verbose_name='年龄') sex = models.IntegerField(verbose_name='性别', choices=CHOICE_SEX, default=0) info = models.TextField(verbose_name='个人详情') author = models.OneToOneField(verbose_name='作者', to='Author', db_constraint=False, on_delete=models.CASCADE, related_name='detail')