一、复合类型使用场景
举例:景点评论,订单评论
需要,景点表,景点评论表,订单表,订单评论表 需要四张表
这时可以使用复合类型 那只需要三张表
二 、复合类型
ContentType --- 类容模型 (它会将创建的模块和定义的模型都记录下来)
ForeignKey(ContentType) ---- 关联复合类型
GenericForeignKey ------ 关联模型
GenericRelation ----- 反向关联
class Sight(models.Model):
"""景点表"""
name = models.CharField('景点名称',max_length=128)
address = models.CharField('地址',max_length=128)
class Order_1(models.Model):
"""订单表"""
sn = models.CharField('订单号',max_length=64)
amount = models.FloatField('订单金额')
comments = GenericRelation('Comment',related_query_name='order_comments')
# class SightComment(models.Model):
# """景点评论"""
# content = models.CharField('景点评论',max_length=512)
# score = models.FloatField('分数')
#
#
# class OrderComment(models.Model):
# """景点评论"""
# content = models.CharField('订单评论',max_length=512)
# score = models.FloatField('分数')
class Comment(models.Model):
"""评论表"""
content_type = models.ForeignKey(ContentType,on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type','object_id')
content = models.CharField('评论内容',max_length=512)
score = models.FloatField('分数')