gpt4 book ai didi

django - 如何在 Django 中为同一个表创建多个一对多关系?

转载 作者:行者123 更新时间:2023-12-01 14:45:22 29 4
gpt4 key购买 nike

首先,我想澄清一下,我正在尝试建立一对多关系,而不是多对一关系。我已经了解 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”字段,如果我能绕过的话。

有没有人对如何解决这个问题有什么好的想法?

谢谢!

最佳答案

可以在ColumnDefinition上添加两个ForeignKeys,一个用于输入,一个用于输出,并给它们单独的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

关于django - 如何在 Django 中为同一个表创建多个一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623886/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com