Django:如何依赖可以切换的外部ID?

时间:2018-09-09 04:35:29

标签: django database rdbms

请考虑以下情形:

我们的Django数据库对象必须依赖于外部服务A(ESA)提供的ID,这是因为我们使用该ID直接从外部提取尚未创建的对象的信息。 ESA可能很快就会关闭,因此我们还从外部服务B(ESB)中提取了有关相同对象的信息,并将它们另存为备用。

由于这些ID在视图和URL中高度依赖,因此理想的情况是使用@property:

@property
dynamic_id = ESA_id

然后,如果ESA关闭,我们可以通过将dynamic_id更改为ESB_id来轻松切换。但是,问题在于,不能在查询集过滤器和其他各种情况下使用属性,在这种情况下,这也是必须的。

我目前的想法是将ESA_id,ESB_id和dynamic_ID分别保存为常规字段并分配dynamic_ID = ESA_id,然后在ESA关闭的情况下,只需遍历对象并执行{{ 1}}。

但是我觉得必须有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

在同一表中具有ESA_id和ESB_id字段是一个很好的解决方案,然后您需要进行某种设置(DEFAULT_SERVICE_ID ='ESA_id'|'ESB_id'),并且您的代码会基于此选项更改查找。

在这里您可以看到动态创建过滤器的方法 https://stackoverflow.com/a/310785/1448667