如何使用相同的数据库在不同的应用程序之间执行django查找?

时间:2016-11-15 15:34:18

标签: django django-models django-orm

我有以下课程(为简洁而减少):

from other.app.models import Enclosure

class Server(models.Model):
    enclosure = models.ForeignKey(Enclosure, null=True, blank=True, db_index=True, related_name='server_enclosure')

    def get_enclosure(self):
        get_enclosure = self.enclosure.server_enclosure.get(rack=10)

models.ForeignKey(Enclosure< - Enclosure是一个独立应用程序中的类。

问题我在查询上。我怀疑这不是一个正确的方法,因为pylint-django抱怨。在django中有更好的方法来执行get()吗?

我正在查看django文档,看起来跨越关系的查找信息是针对同一应用程序中的模型而定制的。我似乎无法为使用相同数据库的不同应用程序的查找找到任何好的参考模式。

1 个答案:

答案 0 :(得分:1)

Django将为您处理跨应用程序甚至跨数据库连接。但是,应由应用程序开发人员/ DevOps确保跨数据库连接实际上是可行的(例如,通过在同一MySQL或PostGRES实例中容纳两个数据库)。但是,您拥有的代码看起来相对时髦。要获得Rack = 10的服务器机箱,我会执行以下操作:

from other.app.models import Enclosure

class Server(models.Model):
    enclosure = models.ForeignKey(Enclosure, null=True, blank=True, db_index=True, related_name='server_enclosure')

    @classmethod    
    def get_enclosure(cls):
        return cls.objects.get(rack=10)

要获取与特定服务器相关的机箱,您只需使用:

p = Server.objects.get(...)
enclosure = p.enclosure