首先,我要澄清一点,我正试图建立一对多关系,而不是多对一关系。我已经了解了ForeignKeys的工作方式。
为了讨论,我简化了我的模型;在实际实施中,它们比现场更丰富。
我有一个名为ColumnDefinition
的模型:
class ColumnDefinition(Model):
column_name = CharField(max_length=32)
column_type = PositiveSmallIntegerField()
column_size = PositiveSmallIntegerField(null=True, blank=True)
我认为有一个注册表。每个注册表都有一组用于输入和输出定义的独立列。我把理论上的“OneToManyField”放在那里来展示我想要做的事情。
class Registry(Model):
input_dictionary = OneToManyField(ColumnDefinition)
output_dictionary = OneToManyField(ColumnDefinition)
created_date = DateTimeField(auto_now_add=True, editable=False)
ColumnDefinition
只与一个注册表有关。所以这不是一个多对多的关系。如果我在ForeignKey
上放置ColumnDefinition
而不是创建反向关系,它只能创建一个反向,而我需要输入和输出反向。
如果我可以绕过它,我不想像在ColumnDefinition
上添加“column_registry_type”字段那样做任何事情。
有没有人对如何解决这个问题有任何好的想法?
谢谢!
答案 0 :(得分:0)
您可以而且应该在ForeignKey
上定义两个不同的ColumnDefinition
字段。只需确保为其中至少一个指定related_name
值即可。
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name
答案 1 :(得分:0)
您可以在ForeignKeys
上添加两个ColumnDefinition
,一个用于输入,一个用于输出,并将它们分开related_names
:
class ColumnDefinition(Model):
...
input_registry = models.ForeignKey(Registry, related_name='input_columns')
output_registry = models.ForeignKey(Registry, related_name='output_columns')
然后,您可以访问registry.input_columns
等列。