2017-03-08 172 views
0

我需要在Django中表示多個一對多關係。也就是說,給定幾個不同的模型,我需要這些中的每個與單個表具有一對多關係。從邏輯上講,該關係屬於「擁有」一對多關係的模型,但是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) 

ManyToOneField不存在。取而代之的是,我應該使用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是非空的。如果ManyToManyField允許我指定它不是真的多對多,我可以這樣做,但它似乎不允許。什麼是正確的方式來做這樣的事情?

回答

1

你可以使用generic relations到您的接收器模型與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)