如何使用contenttype 、GenericForeignKey, GenericRelation

ContentType 作用》》》
  它是一个app组件,可将咱们的porject所有的app和表名称放到contenttypt里面去;基于它,可与多个表,做FK,做可扩展的关系表,写上这个contenttype表之后,它里面有这两个GenericForeignKey,GenericRelation可操作字段,来帮助我们。GenericForeignKey放到关系表中,GenericRelation放到其他表中做反向查找。

———————————————————————

使用contenttype和GenericForeignKey,GenericRelation

使用下面的这两个,都需要先引入,而且这个数据库中不会生成,只是帮我们做数据操作

     from django.contrib.contenttypes.models import ContentType
     from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation
 

 开始流程》》》

虽然这里写了,但是数据库中也不会增加

这个是django内置的所有APP在contrib里面,contenttypes就是它的一个app,通过这个app把contenttype表拿出来

这个东西是在settings里面的,这个里面有每一个表的id,通过这个,更好的让我们设计路飞的表结构

引入之后contenttype之后,先写成这样之后,迁移数据库,在数据库中就能看到表结构,看下图

 

请看这里,结构已经出来

引入这个FK,在下面添加一个字段,但是这个字段不会再数据库中生成;
FK元祖内的东西,跟方框上面的两行代码一一对应;
这个GenericForeignKey是做表关联用的,创建的时候以及查询的时候,都可以帮我们来用,一般还是增加功能用的多

方框内的不是在models中写的,应该是在views视图函数中写的,用来增加价格策略的

这就增加了一个价格策略了,这就是对什么样的课程,加上价格策略,有周期有价格;》》ps 要是给同一个课程加多个策略的话,下图最后一行,就多写几个就行了; 注意下面的id=1,得获取到什么课程,然后进行加

总结,这个course_obj,里面包括两个东西,一个是id,一个是表名称

价格策略的列表;
红色下划线的部分,因为表中有这个content对象,根据这个对象,能获取到它的id和name字段

打印之后的结果,可看下图,则都展示出来了

要解决下面的问题4,先要这么做,下面方框内的,这个就相当于咱们的M2M中的反向查询,这就是做个链表查询,

然后通过period和price这样就能循环出来该课程所有的课程信息和价格策略

到这里就结束了,千万记住这两条数据,不会在数据库中生成

———————————————————————

 

ps:

  请看下图,这个contenttype这个数据库中是不显示的哦,只是帮我们操作数据用的

这个表就是我们按照这个写的model

 

 

 

posted @ 2018-04-15 15:56  Heartbreak-Utopia  阅读(324)  评论(0编辑  收藏  举报