应用中的多个数据库。如何指定每个模型

时间:2015-10-12 19:05:02

标签: django django-models

我有几个模型,其中一个模型使用外部用户的数据库。数据库在设置文件中定义。我将如何为此模型执行以下操作?

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查询。我不需要一个完整的数据库路由器。

1 个答案:

答案 0 :(得分:1)

正如尚旺在评论中指出的那样,使用database router是最佳解决方案。

  

每当查询需要知道要使用哪个数据库时,它就会调用   主路由器,提供模型和提示(如果可用)。 Django的   然后依次尝试每个路由器,直到数据库建议可以   找到。如果找不到任何建议,它会尝试当前的_state.db   提示实例。如果没有提供提示实例,或者   实例当前没有数据库状态,主路由器会   分配默认数据库。

如果您不热衷于使用路由器,可以选择在每个查询集API调用上调用using来定义要使用的数据库。

ItemMaster.objects.using('avails').all()
itemmaster.save(using='avails')
itemmaster.delete(using='avails')

但这不会很干。第二种方法是创建自定义管理器并覆盖每个方法以添加using('avails')片段。但这涉及编写更多代码,使用路由器时可以编写。