基表的作用(继承)
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')