如何将Django过滤器参数作为参数传递给其他函数
问题描述:
我想创建一个返回过滤器结果的类函数,但我希望能够像使用django过滤器一样使用它:如何将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))
但是我得到一个错误,就像指定参数和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(*args, **kwargs) | Q(course__is_compound=True))
的args
是元组与无名参数,kwargs
是字典用命名为参数。但是,如果您想要再次将这些参数作为未命名参数和命名参数传递,则还需要使用星号进行呼叫。
请注意,在这里,你已经建立了一个逻辑或,这意味着要素应该或满足筛选与你,或工作参数的course__is_compound
是True
(或两者同时) 。
如果你想有一个逻辑与,你可以使用:
def section_set_with_compound(self, *args, **kwargs):
return self.section_set.filter(*args, course__is_compound=True, **kwargs)
现在Django会过滤行,这样,所有的条件,你进入保持状态,和的course__is_compound
设置为True
。与第一个代码片段相比,这是语义上不同的。
使用:'Q(** kwargs)' – schwobaseggl
但是你不在过滤器中使用'kwargs'。 –