python - Django基于变量(str)的动态过滤器

标签 python django filter

我正在编写一个函数,可以根据动态插入的模型返回表项。所以我需要避免在函数中使用模型名称。现在,我有时会与另一个模型建立多对多关系,并希望对其进行选择。

假设我的文件模型中有一个 items = ManyToMany(Projects) 字段。现在我可以使用:

filter(projects__in=[1])

选择与 id 1 的项目相关的文件,但我需要此过滤器的项目部分是动态的,因此我可以使用如下内容:

a_field = 'projects'
filter(a_field+'__in'=[1])

这显然不起作用。我该怎么做?

最佳答案

您可以使用 **kwargs 来执行此操作在Python中:构建一个字典,将字符串(参数的名称)映射到值,然后使用带有两个星号的字典调用该函数,例如:

a_field = 'projects'
<b>params = {a_field+'__in': [1]}</b>
filter(<b>**params</b>)

我们当然需要在单独的行上构造字典:

a_field = 'projects'
filter(<b>**{a_field+'__in': [1]}</b>)

如果你有一本像 {'foo': 'bar', 'qux': 14} 这样的字典,然后用 foo(**{'foo': 'bar', 'qux': 14}) 调用它相当于 foo(foo='bar', qux=14) 。该技术并非特定于 Django,而是特定于 Python。 Python 也有一种方法可以使用位置参数来做到这一点:foo(*[1, 'a', 4])相当于 foo(1, 'a', 4) .

关于python - Django基于变量(str)的动态过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52408768/

相关文章:

python Selenium 白页

python - 在python中生成日期数组

python - 如何存储多个不同长度的numpy一维数组并打印它

python - Django 可重用应用程序

css - IE7 ms 后台过滤器不工作

Python-3 : Why this following code returns none in print statement?

django - 使用比萨将pdf写入磁盘

Django - 应用过滤器时无法访问对象属性

ios - 使用对象 Swift 过滤两个数组

r - 如何使用 R 创建 for 循环来过滤特定行并将输出保存在新文档中?