2016-11-15 12 views
0

我有下面的类(降至为了简洁):如何在使用相同数据库的不同应用程序之间执行django查找?

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(机柜< - 外壳是单独的应用程序类

问我是对我的查询。怀疑这是不是正确的方式来做到这一点,因为pylint-django抱怨。是否有更好的方法在django内执行get()?

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

+0

我认为这是完全正常。如果我以正确的方式获得它:)例如,多个项目可能会有'auth'应用程序与用户以及其他具有与用户相关的模型的应用程序。所以这样的跨应用程序查找是必要的。因为您需要在一个应用中过滤用户的某些内容,请在另一个应用中进行过滤。 – wolendranh

+0

谢谢。你确实以正确的方式得到它:-)。我遇到的问题是pylint-django不断抛出一个无成员错误,所以只是想知道是否有更好的方法。 – user2152283

+0

关系查找仅适用于相同的应用程序是完全不正确的。 Django根本不关心你的关系在哪个应用程序中。 –

回答

1

Django将为您处理跨应用程序甚至跨数据库连接。但是,应由开发人员/ DevOps确保跨数据库连接实际上是可行的(例如,通过将两个数据库容纳在相同的MySQL或PostGRES实例中)。但是,你所看到的代码看起来比较时髦。要获得机架= 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 
+0

太棒了。感谢2ps的反馈。 – user2152283

相关问题