python - 如何通过传入选项列表来过滤 Django 查询集?

标签 python django django-models

我有一个可以与 Product 模型关联的抽象 ProductAttribute 模型。可以使用product.attribute_values 访问属性。

假设我有一个表单,其中包含两个选择框,允许用户指定两个属性的值 - 尺寸和重量。

如何在单个查询中将这些值传递到过滤器中,以便像使用 Object.objects.filter(pk__in=(1,2,3) 的整数列表一样) - 我可以选择与所有这些属性值匹配的产品吗?

我希望能够做这样的事情:

options = ['XL','50lbs']
p = Product.objects.filter(attribute_values__matches=options)

这在 Django 的单行代码中可能吗?

TIA

最佳答案

您可以使用__contains__exact

对于不区分大小写的匹配 __icontains__iexact

您可以使用Q模型查找来进行过滤:

options = ['X1', 'X2', 'X3']
qs = [Q(attribute_name=option) for option in options] #or attribute_name__icontains - or whatever

query = qs.pop() #get the first element

for q in qs:
    query |= q

qs = MyModel.objects.filter(query)

关于python - 如何通过传入选项列表来过滤 Django 查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18292798/

相关文章:

python - 如何在 Google App Engine 上使用 MathJax 库

python - 如果 json 中存在可选键,则 Django 过滤器

Django 删除多个 m2m 关系而不循环

python - Django 设置默认表单值

python - kdeplot seaborn 中的自定义阴影调色板

Python:在 Windows 上启动新的命令提示符并等待它完成/退出

python - Pyparsing:将半JSON嵌套明文数据解析为列表

python - 模型未显示在 django admin 上

Django Wagtail CMS 文件太大而无法上传

python - 限制 Django 中内联表单集的外键查询集