我有几个模型,其中一个模型使用外部用户的数据库。数据库在设置文件中定义。我将如何为此模型执行以下操作?
class ItemMaster(models.Model):
id = models.AutoField(primary_key=True) # auto-added anyways
guid = models.CharField(max_length=36, unique=True)
db = using('avails') # <== use this database
注意:我唯一关心的是能够进行get_queryset
查询。我不需要一个完整的数据库路由器。
答案 0 :(得分:1)
正如尚旺在评论中指出的那样,使用database router是最佳解决方案。
每当查询需要知道要使用哪个数据库时,它就会调用 主路由器,提供模型和提示(如果可用)。 Django的 然后依次尝试每个路由器,直到数据库建议可以 找到。如果找不到任何建议,它会尝试当前的_state.db 提示实例。如果没有提供提示实例,或者 实例当前没有数据库状态,主路由器会 分配默认数据库。
如果您不热衷于使用路由器,可以选择在每个查询集API调用上调用using
来定义要使用的数据库。
ItemMaster.objects.using('avails').all()
itemmaster.save(using='avails')
itemmaster.delete(using='avails')
但这不会很干。第二种方法是创建自定义管理器并覆盖每个方法以添加using('avails')片段。但这涉及编写更多代码,使用路由器时可以编写。