我知道您不能使用過濾器調用方法,因爲它是基於數據庫執行的。所以我想寫一個自定義過濾器。Django - 調用方法的自定義過濾器
@staticmethod
def custom_filter(obj,method_name, arg=False):
for i in obj.objects.all():
if getattr(i, method_name)() == arg:
yield i
我能得到這個,如果我叫工作:
MyModel.custom_filter(MyModel,'my_method','myarg')
但是,我不能鏈條這些結合在一起像普通的過濾器。
我可以做這樣的事情:
@staticmethod
def custom_double_filter(obj,method1,arg1,method2,arg2):
for i in obj.objects.all():
if getattr(i, method1)() == arg1 and getattr(i,method2)()==arg2:
yield i
,但我想它支持的過濾器和任意數量的一些方法都有自己的論據
@staticmethod
def custom_double_filter(obj,method1,arg1,method2,arg2):
for i in obj.objects.all():
if getattr(i, method1)(<may need to pass an argument>) == arg1 and getattr(i,method2)()==arg2:
yield i
編輯:因此,我試圖做一個像這樣的自定義管理器:
class GroupManager(models.Manager):
use_for_related_fields = True
def custom_filter(self,method_name, arg=False):
results = []
for i in self.all():
if getattr(i, method_name)() == arg:
results.append(i)
return results
這適用於一個調用custom_filter,但o自從我返回一個列表以來,我無法將這些調用連接在一起。我需要一種方法來傳遞任意數量的參數
這看起來像我可能想放置過濾器的地方。我怎麼會去寫實際的過濾器呢?我希望過濾器能夠調用任何方法或方法的組合 – JPC 2011-02-02 22:12:03