2016-11-15 13 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

相關問題