编辑
Django从入门到放弃 - 刘清政 - 博客园
python/Django-rest-framework框架/11-Book系列多表群操作 | Justin-刘清政的博客
不使用django自带的项目名+表名,自定义数据库表名
class MESSAGE_PROCESS_CHANNEL():
class Meta:
db_table="MESSAGE_PROCESS_CHANNEL"
class BaseModel(models.Model):
is_delete=models.BooleanField(default=False) # 存到数据库也是0,1
create_time=models.DateTimeField(auto_now_add=True)
last_update_time=models.DateTimeField(auto_now_add=True)
class Meta:
# 单个字段有索引唯一
# 多个字段,有联合索引,联合唯一
abstract=True #抽象表,不在数据库建立
class Book(BaseModel):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
price=models.DecimalField(max_digits=5,decimal_places=2)
一对多的关系一旦确立,关联字段写在多的一方
to_field 默认不写,关联到Publish主键
db_constraint=False #逻辑上的关联,实质没有外键联系,增删不会受影响,但是orm查询不影响
publish=models.ForeginKey(to='Publish',on_delete=models.DO_NOTHING,db_constraint=False)
多对多,跟作者,关联字段写在查询次数多的一方
什么时候使用自动,什么时候使用手动?第三张表只有关联字段,用自动。第三张表有扩展字段,需要手动写
不能写on_delete,存在于第三张表
autor=models.ManyToManyField(to='Author',db_constrain=False)
class Publish(BaseModel):
name=models.CharField(max_length=32)
addr=models.CharField(max_length=32)
class Author(BaseModel):
name=models.CharField(max_length=32)
sex=models.CharField(max_length=32)
一对一的关系,写在查询频率高的一方,一对一也是一个foreginkey,本质是foreginkey+unique,字段唯一对唯一
autordetail=models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE,db_constrain=False) 作者没了,作者详情没有用了
class AuthorDetail(BaseModel):
mobile=models.CharField(max_length=11)
二、表断关联
1、表之间没有外键关联,但是有外键逻辑关联(有充当外键的字段)
2、断关联后不会影响数据库查询效率,但是会极大提高数据库增删改效率(不影响增删改查操作)
3、断关联一定要通过逻辑保证表之间数据的安全,不要出现脏数据
4、断关联
5、级联关系
作者没了,详情也没:on_delete=models.CASCADE #最好不要用,级联删除危险
出版社没了,书还是那个出版社出版:on_delete=models.DO_NOTHING
部门没了,员工没有部门(空不能):null=True, on_delete=models.SET_NULL
部门没了,员工进入默认部门(默认值):default=0, on_delete=models.SET_DEFAULT
values与values_list区别
django: values()与values_list()