将m2m-through关系从两个不同的类添加到同一个模型

时间:2015-12-02 11:22:12

标签: python django many-to-many

我有一个现有的应用程序,我必须将常规m2m关系更改为直通关系。 我需要能够为关系添加额外的参数。 我的问题是我需要在两个地方完成。

这是标准的例子。

class Person(models.Model):
    name = models.CharField(max_length=255)

class Group(models.Model):
    name = models.CharField(max_length=255)
    members = models.ManyToManyField(Person, through='Membership')


class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)

我有另一个需要与m2m成员关系的模型。我的建议如下。

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group, null=True, blank=True)
    another_group = models.ForeignKey(AnotherGroup, null=True, blank=True)

class AnotherGroup(models.Model):
    name = models.CharField(max_length=255)
    members = models.ManyToManyField(Person, through='Membership')

我不得不告诉我,每个实例都必须有一个空字段,或者这是我唯一的选择吗?

1 个答案:

答案 0 :(得分:0)

另一种选择是在表格中使用内容类型。 https://docs.djangoproject.com/en/1.9/ref/contrib/contenttypes/#generic-relations

from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class Membership(models.Model):
    person = models.ForeignKey(Person)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')