day83-drf

最后都变了- 提交于 2019-11-27 11:28:55

基表的作用(继承)

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')

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!