django - 总结 - contenttypes


我们得知没创建一张表都会在contenttpes里有一条记录

当一张表 需要动态的和多张表建立外键关系
如何创建?
利用contenttpes表,
表中数据id:指的是在具体的某一张表中的id记录
表 : contenttypes 中具体的某一张表所在记录的id
当创建好以后,如何更加方便的让我们去操作呢?
from django.db import models from django.contrib.contenttypes.models import ContentType # 关联的表 from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation# 方便我们去查询 class DegreeCourse(models.Model): """学位课程""" name = models.CharField(max_length=128, unique=True) course_img = models.CharField(max_length=255, verbose_name="缩略图") brief = models.TextField(verbose_name="学位课程简介", ) class Course(models.Model): """专题课程""" name = models.CharField(max_length=128, unique=True) course_img = models.CharField(max_length=255) # 不会在数据库生成列,只用于帮助你进行查询 policy_list = GenericRelation("PricePolicy") class PricePolicy(models.Model): """价格与有课程效期表""" # 关联course or degree_course
# 绑定表 content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) # 绑定表里的 对象
object_id = models.PositiveIntegerField() price = models.FloatField()
# 如果不写下面的,如果表存在,但是object_id不存在的话,这样也不会报错;但是明显不能这样, 因此下面这个字段不仅可以约束两者之间的关系,核能方便查询,(不用在通过contenttype表去找对应的应用和表)
# 不会在数据库生成列,只用于帮助你进行添加和查询
content_object = GenericForeignKey('content_type', 'object_id')
# 添加 models.PricePolicy.objects.create( price=9.9, content_object=models.Course.objects.get(id=1) ) # course ------>price obj = models.Course.objects.get(id=1) for item in obj.policy_list.all(): print(item.id, item.valid_period, item.price) # price-------->course price = models.PricePolicy.objects.get(id=2)
Contenttype表的实例对象可以 。metaclass获取对应的模型类

浙公网安备 33010602011771号