如何将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..") 

我该如何做到这一点?

+0

使用:'Q(** kwargs)' – schwobaseggl

+0

但是你不在过滤器中使用'kwargs'。 –

您需要在呼叫使用星号和双星号(*)到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_compoundTrue(或两者同时) 。

如果你想有一个逻辑与,你可以使用:

def section_set_with_compound(self, *args, **kwargs): 
    return self.section_set.filter(*args, course__is_compound=True, **kwargs)

现在Django会过滤行,这样,所有的条件,你进入保持状态,course__is_compound设置为True。与第一个代码片段相比,这是语义上不同的