Skip to main content
 首页 » 编程设计

python之如何将 Django 过滤器参数作为参数传递给其他函数

2025年01月19日34yjmyzz

我想创建一个返回过滤器结果的类函数,但我希望能够像该函数一样使用它也是一个 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。与第一个代码片段相比,这语义不同。