请考虑以下情形:
我们的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}}。
但是我觉得必须有更好的方法吗?
答案 0 :(得分:1)
在同一表中具有ESA_id和ESB_id字段是一个很好的解决方案,然后您需要进行某种设置(DEFAULT_SERVICE_ID ='ESA_id'|'ESB_id'),并且您的代码会基于此选项更改查找。
在这里您可以看到动态创建过滤器的方法 https://stackoverflow.com/a/310785/1448667