django模型系统三

关联对象操作及多表查询

关联表的数据操作

一对多

正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向。

--增:

  • 通过属性赋值的方式,
  • 通过主键的方式

总结:ForeignKey字段的更新,和普通的字段一样。

删:只有外键设置为null=True,可以通过赋值None来删除关系。

查:

通过ForeignKey字段模型的字段

 反向:如果一个模型如果被另外一个模型外键关联,通过这个模型对关联他的模型进行操作叫做反向

 

查:通过管理器,默认管理器,有外键的模型名称的小写加上_set(foo_set,foo是模型名称小写),通过这个管理器可以查询模型的实例,在定义外键的时候,通过relaed_name

可以覆盖这个名称。

增:

  • 通过add方法,可以添加多个
  • 通过create方法

删:(关系删掉,不会把数据对象删掉)

remove(obj1,obj2,obj3)

clear()清空

总结:

add ,remove,clear等直接操作数据库。

改:替换对象集

set([s1,s2])

对多:

如果因为有额外字段,自定义了中间模型,我们需要通过中间模型的管理器,进行manytomany关系的创建和删除。

默认情况,和一对多中的,add,create,remove,clear等等。

唯一的区别是:多对多

多对多正向的时候,

对一:非常一对一字段,增删改查和普通字段没区别

反向的时候使用,使用模型的小写,也可以使用related_name覆盖,这个就不是管理器,就是一个普通属性。

注意:一个被一对一管理的模型,它的实例如果没有被分配关系

实例:学生对象,没有分配一个学生详情对象,如果去取,会抛出异常,DoseNoteExist.

跨表查询

例如,查询男生都报名了什么课程?

去重:

总结:要跨越关系,只需要使用跨越模型的相关字段的字段名,以下划线分隔,直到到达你想要的字段为止。这个关系要多深有多深。

 查询所有报名Python课程的学员。

查询所有报名了Python全栈课程,在django框架第7期的学员:

 学员报名了Python课程的班级有哪些?

猜你喜欢

转载自www.cnblogs.com/mmll0911/p/10634279.html
今日推荐