通过模型中的多个外键,用于与同一模型的多对多关系

时间:2014-01-12 18:56:04

标签: django django-models many-to-many

我通过名为RelatedResource的中间模型从一个名为Resource的模型到它自己的关系中有一个多对多的关系:

class Resource(TimeStampedModel):
    title = models.CharField(max_length=100, unique=True) # book title, person's name, video title, etc.
    description = models.TextField(max_length=500, null=True, blank=True)
    link = models.URLField(max_length=500, blank=True, null=True) # dynamically generated for youtube and amazon; todo: uniqueness
    resourceID = models.CharField(max_length=20, blank=True, null=True) # todo: uniqueness
    picture = models.URLField(max_length=500, blank=True)
    tags = TaggableManager()
    ...

class RelatedResource(models.Model):
    input = models.ForeignKey(Resource, related_name="input_resource")
    output = models.ForeignKey(Resource, related_name="output_resource")
    input_affiliate = models.ForeignKey(Resource, related_name="while_with", blank=True, null=True)
    reason = models.CharField(max_length=500)
    ...

Django抱怨说,拥有超过2个外键的资源是不明确的,因为那时它不知道三个ForeignKey字段中的哪两个适用于多对多关系。

有什么方法可以将所有3个ForeignKey字段保留在中间模型中,并告诉Django哪两个字段用于多对多关系?

1 个答案:

答案 0 :(得分:0)

我认为你要做的是递归关系。 这里描述了它。 https://docs.djangoproject.com/en/1.6/ref/models/fields/#recursive-relationships

在这里。 Django recursive relationship