如何使用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是做表关联用的,创建的时候以及查询的时候,都可以帮我们来用,一般还是增加功能用的多
![](https://images2018.cnblogs.com/blog/1145506/201804/1145506-20180415155237984-617710084.png)
方框内的不是在models中写的,应该是在views视图函数中写的,用来增加价格策略的
这就增加了一个价格策略了,这就是对什么样的课程,加上价格策略,有周期有价格;》》ps 要是给同一个课程加多个策略的话,下图最后一行,就多写几个就行了; 注意下面的id=1,得获取到什么课程,然后进行加
总结,这个course_obj,里面包括两个东西,一个是id,一个是表名称
价格策略的列表;
红色下划线的部分,因为表中有这个content对象,根据这个对象,能获取到它的id和name字段
![](https://images2018.cnblogs.com/blog/1145506/201804/1145506-20180415155316240-1406790447.png)
打印之后的结果,可看下图,则都展示出来了
要解决下面的问题4,先要这么做,下面方框内的,这个就相当于咱们的M2M中的反向查询,这就是做个链表查询,
![](https://images2018.cnblogs.com/blog/1145506/201804/1145506-20180415155337142-610852019.png)
然后通过period和price这样就能循环出来该课程所有的课程信息和价格策略
到这里就结束了,千万记住这两条数据,不会在数据库中生成
———————————————————————
ps:
请看下图,这个contenttype这个数据库中是不显示的哦,只是帮我们操作数据用的
这个表就是我们按照这个写的model