books系列表接口
#1、book表
-一对一关系,其实是ForeignKey,unique
-on_delete:models.DO_NOTHING(删除了一个字段,另一个字段什么都不干,例如书和出版社表,出版社没了,书还有),models.CASCADE(级联删除,例如作者和作者详情表,作者没了,作者详情表也没有意义,一对一关系)
-字段建索引,字段唯一
-联合索引,联合唯一
-日期类型 auth_now(更新数据时候日期更新,例如last_update_time字段) 和auto_now_add(一旦建立就不变,例如create_time字段)
-基表 abstract = True #abstract = True 写这个就不会生成BaseModel表
from django.db import models
# Create your models here.
class BaseModel(models.Model):
is_delete = models.BooleanField(default=False)
create_time = models.DateTimeField(auto_now_add=True)
last_update_time = models.DateTimeField(auto_now=True)
class Meta:
abstract = True #abstract = True 写这个就不会生成BaseModel表
class Book(BaseModel):
#id,name ,price,is_delete,create_time,last_update_time
# id = models.AutoField(primary_key=True)
#verbose_name admin中显示中文
name = models.CharField(max_length=32,verbose_name='书名')
price = models.DecimalField(max_digits=5,decimal_places=2,verbose_name='书价')
#一对多关系,关联字段建在多的一方
#to_field:默认不写,关联到Publish的主键
#db_constraint=False:逻辑上的关联,实质上没有外键联系,增删不会受外键影响,但是orm查询不影响
publish = models.ForeignKey(to='Publish',on_delete=models.DO_NOTHING,db_constraint=False)
#多对多,关联字段写在查询次数多的一方
#什么时候用自动,什么时候用手动?第三张表没有关联字段,用自动,第三张表有扩展字段,需要手动写
#不能写on_delete(因为这是第三张表)
authors = models.ManyToManyField(to='Author',db_constraint=False,verbose_name='作者')
def __str__(self):
return self.name
@property
def publish_name(self):
return self.publish.name
def author_list(self):
author_list = self.authors.all()
# l1 = []
# for author in author_list:
# l1.append({'name':author.name,'sex':author.get_sex_display()})
# return l1
#列表推导式
return [