【发布时间】:2011-06-20 07:12:54
【问题描述】:
我知道您不能使用过滤器调用方法,因为它是基于数据库的。所以我正在尝试编写一个自定义过滤器。
@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 的一次调用,但显然由于我要返回一个列表,因此我无法将这些调用链接在一起。我需要一种能够传递任意数量参数的方法
【问题讨论】:
标签: python django django-models