0

我的問題如下:一段時間以來,我習慣於在我的Django模型中的屬性中封裝我的應用程序的幾個(最相關和可重用的)查詢。導入模型來封裝屬性中的查詢會導致循環導入問題

要做到這一點,我經常這樣做:

from my_app.models import ModelBla 

..... 

class ModelBlehhh(): 
    @property 
    def some_bla_things(self, bla): 
     return ModelBla.objects.filter(.....) 

我一直認爲這是很好的做法,我用大部分在我的應用很多。

問題是:這些主要用於查詢的導入指出要阻礙我的模型的關係結構。含義:越來越頻繁的是,如果不創建循環導入問題,我無法創建查詢屬性。

我的方法是否正確?有沒有更好的方法來封裝這些查詢?你平常都做什麼?

感謝您的幫助。

回答

1

我不明白你爲什麼需要這些屬性,更不用說進口了。

如果您正在篩選基於當前模型的其他模型,那必定意味着您與該模型有關係。如果你有一個關係,那麼你應該使用自動向後關係。所以,而不是SomeOtherModel.objects.filter(blah=self),你應該在做self.someothermodel_set.all()

0
Is there a better way to encapsulate these queries? 

其實,你不應該讓循環依賴性吃掉你,而是去掉它。這將增加您在項目後期階段訪問數據庫的權限。您只能通過在此階段重新定義您的結構來刪除循環導入,否則重構和糾正錯誤的位置已爲時過晚。

What do you usually do? 

基本上,這不是別人的做法。它取決於你的應用程序的範圍。如果您的應用程序是長期應用程序,那麼您所做的是錯誤的。只需創建一個存儲庫類型的東西,所有代碼都可以使用它,並且代碼可以在需要時訪問它,而不需要任何循環導入,即沒有任何依賴關係。