对于多数据库关系,我使用什么而不是外键关系

时间:2012-01-26 02:32:04

标签: django django-models

我需要向我的用户提供一个模型中的选项列表,该模型存储在单独的旧数据库中。 django multi-db设置不支持外键。理想的选择是使用外键,但由于那是不可能的,我需要一些其他东西。

因此,我在另一个数据库上创建了一个IntegerField,并尝试使用选项来获取可用选项列表。

class OtherDBTable(models.Model):
    client = models.IntegerField(max_length=20, choices=Client.objects.values_list('id','name'))
我遇到的问题是这些选择似乎已经填充了一次,但从未刷新过。每当客户列表更改可选择的最新选项区域时,我如何确保。

3 个答案:

答案 0 :(得分:1)

我真正想要的是一种可以模拟外键字段行为的方式,至少就匹配ID而言。

没有一种明确的方法可以做到这一点,因为当您实例化模型时,您似乎无法实际指定其他字段(您可以轻松地使用表单)

在任何情况下处理问题,由于数据库是基于MySQL的,我最终从我在其他数据库中需要的表创建视图。

答案 1 :(得分:0)

建立@ Yuji的答案 - 如果你在模型的self.fields['field'].choices = whatever__init__whatever可以是任何可迭代的。

这意味着您可以继承iterable,并将该对象接口连接到旧数据库,或者您可以使用生成器函数(如果您不熟悉,请查找yield关键字)。

答案 2 :(得分:-2)

引用Django的manual

  

最后,请注意,选择可以是任何可迭代对象 - 不一定是列表或元组。 这可让您动态构建选项。但是如果你发现你自己选择了动态的选择,你可能最好使用带有ForeignKey的正确数据库表。选择适用于静态数据,如果有的话,变化不大。

为什么不想从旧数据库导出数据并将其导入新数据库?如果遗留数据库仍在使用中,则可以定期执行此操作。