Django中的多个一对多关系

Django中的多个一对多关系,django,django-models,Django,Django Models,我需要用Django表示多个一对多关系。也就是说,给定几个不同的模型,我需要每个模型都与一个表有一对多的关系。从逻辑上讲,该关系属于“拥有”一对多关系的模型,但Django强制我在目标表上使用多对一关系,而不是在源表上使用一对多关系。以下是我希望能做的: class Sink(models.Model): name = models.CharField('name', max_length=24) class A(models.Model): name = models.Cha

我需要用Django表示多个一对多关系。也就是说,给定几个不同的模型,我需要每个模型都与一个表有一对多的关系。从逻辑上讲,该关系属于“拥有”一对多关系的模型,但Django强制我在目标表上使用多对一关系,而不是在源表上使用一对多关系。以下是我希望能做的:

class Sink(models.Model):
    name = models.CharField('name', max_length=24)

class A(models.Model):
    name = models.CharField('name', max_length=24)
    sink = models.ManyToOneField(Sink)

class B(models.Model):
    name = models.CharField('name', max_length=24)
    sink = models.ManyToOneField(Sink)
但是
manytonefield
不存在。相反,我应该为每个一对多字段使用
ForeignKey
,如:

class Sink(models.Model):
    name = models.CharField('name', max_length=24)
    a = models.ForeignKey(A)
    b = models.ForeignKey(B)

class A(models.Model):
    name = models.CharField('name', max_length=24)

class B(models.Model):
    name = models.CharField('name', max_length=24)
这在逻辑上是错误的,因为我从来都不希望Sink.a和Sink.b都是非null的。如果
ManyToManyField
允许我指定它不是真正的多对多,我可以这样做,但它似乎不允许这样做。这样做的正确方法是什么?

您可以使用
GenericForeignKey将水槽模型链接到单个a或B模型:

class Sink(models.Model):
    name = models.CharField('name', max_length=24)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

class A(models.Model):
    name = models.CharField('name', max_length=24)

class B(models.Model):
    name = models.CharField('name', max_length=24)