django -orm常用操作

编辑
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()

更新字段为null

无法将Django日期时间字段更新为Null

正想查询与反向查询

Django 两张表的正向查找和反向查找 - ihszg - 博客园

微信:jinmuqq222
原文地址:https://www.cnblogs.com/jinmuqq222/p/14526362.html