【发布时间】:2021-01-20 16:02:10
【问题描述】:
我想创建一个只添加一些关于另一个表的信息的表。这是我所拥有的:
我有两张桌子Exchange 和ExchangeConnection:
class Exchange(models.Model):
slug = models.CharField(max_length=200, primary_key=True, blank=False, null=False)
name = models.CharField(max_length=200, blank=False, null=False)
class ExchangeConnection(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
exchange = models.OneToOneField(Exchange, on_delete=models.CASCADE)
我定义了多个交换,在整个应用使用过程中不会被修改。只有有用的存储数据才能使我的应用程序正常工作。我觉得它更像是一种ExchangeConnection。
然后,我有ExchangeConnection。该表将在整个应用程序使用过程中进行修改,因为它表示属于用户的信息,并且可以创建一些:
当用户创建ExchangeConnection时,他只选择了他正在使用的Exchange。
在我的代码中,您可以看到我正在使用 OneToOneField,这并不好,因为这意味着每个 ExchangeConnection 只能“链接”一次 Exchange。
我不想在ExchangeConnection 中使用ForeignKeyField,因为我不希望ExchangeConnections 成为Exchange 的一部分。
我当然误解了关系的逻辑,所以我可能会很清楚......
【问题讨论】:
-
目前每个
ExchangeConnection都可以有一个对应的Exchange。我认为您要说的是User得到一个ExchangeConnection可以链接到多个Exchange对象中的一个。您说您不想要 FK 字段,但我怀疑这实际上是您想要的。只是有点不清楚。 -
灾难处方:不会修改。不要那样设计。
-
@Belayer 你是什么意思?
-
不要设计你的系统,好像某些组件永远不会改变;设计以允许更改。然后,如果事实证明它从未改变过,那么您并没有失去任何东西。但是,当它确实改变了您的系统(应用程序)时,可以非常更轻松地进行调整。
-
你说的是我说的某些组件在整个应用程序使用过程中永远不会改变的事实?我的意思是它会在很长一段时间内改变,但不会改变那么多。无论如何,我的代码将允许更改。
标签: python sql django postgresql