通用关系多对一或多对多?

问题描述 投票:0回答:1

我面临以下问题:

我想创建一个可以与不同模型(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作为主键添加到结果,所以最后它的工作方式就像是多对多的关系,因为最终工作就像Entity relational diagram一样。

那么在我的实体关系图的最后,我应该如何表示这种关系?作为一对多或多对多?

django database-design django-models relational-database
1个回答
0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.