首页 > 解决方案 > 如何在 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": }]

标签: djangomany-to-many

解决方案


您可以将其转换为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()

推荐阅读