我想创建一个返回过滤器结果的类函数,但我希望能够像该函数一样使用它也是一个 django 过滤器:
这是我试过的:
def section_set_with_compound(self, *args, **kwargs):
print args
print kwargs
return self.section_set.filter(Q(args) |Q(course__is_compound=True))
但是我得到一个错误,好像 args 和 kwags 是空的:
我希望能够做到:
myobject.section_set_with_compound(param1=1,param2__param3__=x,param4__icontains="ha..")
我怎样才能做到这一点?
请您参考如下方法:
您还需要在调用 Q 时使用星号和双星号 (*):
def section_set_with_compound(self, *args, **kwargs):
return self.section_set.filter(Q(<b>*args, **kwargs</b>) | Q(course__is_compound=True)) args 是一个带有未命名 参数的元组,kwargs 是一个带有 参数的字典命名参数。但如果您想再次将这些作为未命名和命名参数传递,您还需要使用星号进行调用。
请注意,您在这里构造了一个逻辑或,这意味着元素应该或使用您使用的参数满足过滤器,或 course__is_compound 为 True(或两者同时存在)。
如果您想要一个逻辑与,您可以使用:
def section_set_with_compound(self, *args, **kwargs):
return self.section_set.filter(<b>*args, course__is_compound=True, **kwargs</b>) 现在 Django 将过滤行,使您输入的所有条件都保持不变,并且 course__is_compound 设置为 True。与第一个代码片段相比,这语义不同。
