django - 如何在 Django 中动态组合 OR 查询过滤器以从 ManyToManyFields 中删除对象对?
问题描述
如果我想从多对多字段中删除多个对象,我需要创建一个像下面这样的动态过滤器。
PizzaToppingRelationship = Pizza.toppings.through
PizzaToppingRelationship.objects.filter(
Q(pizza=my_pizza, topping=pepperoni) |
Q(pizza=your_pizza, topping=pepperoni1) |
Q(pizza=your_pizza2, topping=mushroom)
).delete()
但是,我想从查询对象列表中创建此查询过滤器。怎么做?
例如 [{"pizza": <my_pizza>, "topping": }, {"pizza": <your_pizza>, "topping": }, {"pizza": <your_pizza2>, "topping": }]
解决方案
您可以将其转换为Q
对象:
from django.db.models import Q
data = [
{'pizza': my_pizza, 'topping': pepperoni},
, {'pizza': your_pizza, 'topping': pepperoni1}
, {'pizza': your_pizza2, 'topping': mushroom}
]
PizzaToppingRelationship = Pizza.toppings.through
PizzaToppingRelationship.objects.filter(
Q(*[Q(**dati) for dati in data], _connector=Q.OR)
).delete()
推荐阅读
- pandas - matplotlib 绘制多级数据框
- google-cloud-platform - Google Cloud Genomics Pipeline 区域和区域规范错误
- php - Laravel Eloquent 忽略多态关系中的 mutator
- python - 如何在 Python 中将浮点记数法转换为 10 次科学记数法的幂?
- php - PHP Post 为空然后分配默认值
- xamarin - Xamarin.Android 在左右角添加工具栏项
- android - SQLite 中的表中的表
- angular - 多次调用Angular Service单例构造函数
- amazon-web-services - 如果其中一个命令失败,则在构建阶段执行剩余命令
- ios - 如何使扩展适用于多个应用程序目标?