我正在調用一個啓動一個進程的函數,這個進程需要更長的時間執行,完成了許多不同的事情。該功能主要處理特定類別的實例,Item
。這些項目按不同屬性分類:category1
,category2
和category3
。現在確保queryset被緩存
,存在適用某種規則,這些類別不同的模式:Rule
許多一對多屬性:categories1
,categories2
和categories3
。規則適用於Item
,如果相同的規則指向不同的類別,則只應用其中的一個。其中的一個是由封裝在函數特定邏輯中定義的決定:
class Rule(models.Model):
warehouse = models.ForeignKey('Warehouse')
categories1 = models.ManyToManyField('Category1')
categories2 = models.ManyToManyField('Category2')
categories3 = models.ManyToManyField('Category3')
@staticmethod
def get_rules_that_applies(item):
rules = warehouse.rule_set.all()
if not rules.exists():
return None
# ... determine which rule applies to the item by filtering, etc.
return rule
問題在於get_rules_that_applies
方法。每次我們需要得到適用於某個項目的規則,並讓我再次說,在我們正在討論的過程中涉及許多項目時,調用warehouse.rule_set.all()
。
由於規則在此過程中不會改變,所以我們可以緩存倉庫中的所有規則,但怎麼做?我如何確保warehouse = warehouse.rule_set.all()
被緩存,並且所有按這些規則操作的篩選和QuerySet操作都不會觸及數據庫?
什麼是倉庫get_rules_that_applies? –
@DimaKudosh是的我應該提到它:倉庫就像所有過程發生的「主/背景」對象。應用程序中的所有內容都圍繞着一個「倉庫」實例。 – dabadaba