通用关系多对一或多对多?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通用关系多对一或多对多?相关的知识,希望对你有一定的参考价值。
我面临以下问题:
我想创建一个可以与不同模型(qazxsw点)相关联的后果模型(Aka:Pros and Cons模型),并包含以下信息:
Generic Relationship Django
对象(Of属性)可能会产生许多后果,但后果只属于一个后果,因此它应该是多对一关系。
Consequences : Boolean (Positive or Negative)
Of : Model_Primary_Key
Reason : Text
Author : User_Primary_Key
Users_likes : List<Users>
问题是我不知道后果模型和其他模型之间的关系是多对一还是多对多。
通常当你有一对多时,有多个的部分包含另一个的外键,但是如果我这样做,外键将是Author和Of,而set将是复合主键,但是如果我在这里,用户不能有每个对象的结果,它应该是可能的。
所以我找到的唯一解决方案是将id作为主键添加到结果,所以最后它的工作方式就像是多对多的关系,因为最终工作就像一样。
那么在我的实体关系图的最后,我应该如何表示这种关系?作为一对多或多对多?
您可以使用djangos隐式Associative entity作为主键,而不是添加AutoField
约束来克服您描述的障碍。
unique_together
这样,一个from django.db import models
from django.contrib.auth.models import User
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class Consequence(models.Model):
# implicit AutoField
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
author = models.ForeignKey(User)
is_positive_consequence = models.BooleanField()
reason = models.CharField(max_length=200)
class ConsequenceLike(models.Model):
# implicit AutoField
parent = models.ForeignKey(Consequence)
user = models.ForeignKey(User)
可以创建许多指向同一对象的User
实例,因为没有唯一约束。
这为您以后过滤提供了很大的灵活性:
Consequence
以上是关于通用关系多对一或多对多?的主要内容,如果未能解决你的问题,请参考以下文章