我想能如果可能的話,通過objects
通過ARGS或kwargs,沒有不必要的併發症。它看起來像Model.objects('something').all()
或Model.objects('something').order_by('field')
。我試圖爲AManager自定義__init__
,但無法使其正常工作,所以它可能與編寫適當的__init__
函數一樣簡單。Django的定製model.Manager所以它接受參數
我所做的是一個方法添加到自定義管理器,它看起來是這樣的:
class AManager(models.Manager):
def example(self, arg):
self.example = arg
return self
class A(models.Model):
name = models.Charfield()
objects = AManager()
在這個例子中,A.objects.example('name').all()
將返回通常A.objects.all()
,當然,除非example('name')
影響查詢集莫名其妙。我想要做的是避免像A.objects.custom_filter('name').another_filter('name')
這樣的事情,我必須爲每個鏈式過濾器包含一個重複的參數。
我的一些查詢調用模型屬性,這對於獲取和計算都很昂貴。它們在調用自定義QuerySet方法時發生。我現在保存計算的值(作爲DataList實例)。我想調用保存的值(如果它們存在或使用QuerySet),並傳遞一些初始值使其更容易。然後,我可以將相同的方法對QuerySet和DataList進行鏈接,因此查詢清晰可辨並且讀取的內容相同。但是,在Django查詢過於昂貴的情況下,操作會切換到針對Python類的方法。那麼我如何定製'__call__'方法呢? – Cole
沒有更具體的代碼示例,我很難給你指示如何構建通過鏈接保留狀態的自定義QuerySets。退房Django的模型utils的具有能夠解決定製的QuerySet方法鏈接一個PassthroughManager:實際上我用https://django-model-utils.readthedocs.org/en/latest/managers.html#passthroughmanager –
'PassThroughManager '頻繁:) – Cole