官网解释:
对于模型,F实现了,在不需要将模型字段从数据库导入python内存的情况下,执行数据库的操作。
相反的,django用F表达式生成了 描述数据库层级需要的操作 的SQL表达式。
创建一个包含多对多关系的类
其中 Article类有一个字段关联到django.contrib.auth.models的User。
执行 makemigrations与migrate后,数据库对于这个类会生成两张表(auth_user表已经生成),
blogajax_testmany字段
blogajax_testmany_article字段
显然表blogajax_testmany_article用于表示这个多对多关系,testmany_id用于表示表bloagajax_testmany的id。
创建Teacher,Student类,Teacher中有字段多多关联到学生
django会自动创建三张表
两张表表示数据,另一张表表示关系
添加
在使用add函数之后,就会保存到数据库中,而不用调用save,django版本2.2.6,python3.6
以下分别从 Teacher和Student实例添加多对多关系
Student对象
student,对应的该字段是teacher_set,类名_set,而不是 字段名(teach)_set, 添加可以通过如上方式添加
Teacher对象
改写Student,添加正整数字段,默认值20
F表达式
既可以用于单个对象,也可以用于多个对象
Q表达式
filter中的关键字查询,是并AND关系。如果想要更复杂的查询,比如OR,可以用Q表达式.
Q表达式可以用 | 或者 &连接,也可用 ~ 表示非关系。Q表达式要在关键字参数之前。