Django queryset-过滤不在列表中
Django queryset- Filter by not in list
我有具有名称和颜色的 Dog 模型,并且我有包含我想要排除的狗的(名称、颜色)的元组列表。
我怎样才能实现一个查询集来过滤该列表中不存在的狗?
class Dog(BaseModel):
name = models.CharField(max_length=255)
color = models.CharField(max_length=255)
Dog.objects.all()
>> [<Dog: name='Lucky', color='Brown'>, <Dog: name='Lucky', color='White'>, <Dog: name='Maple', color='Brown'> ,<Dog: name='Maple', color='Black'>, <Dog: name='Maple', color='White'>]
_list = [('Maple', 'White'), ('Lucky', 'Brown')]
我要找的是这样的东西:
Dog.objects.custom_exclude(_list)
>> [<Dog: name='Lucky', color='White'>, <Dog: name='Maple', color='Brown'> ,<Dog: name='Maple', color='Black'>]
这应该可以完成工作。
import operator
from functools import reduce
from django.db.models import Q
exclude_params = reduce(operator.or_, [Q(name=name, color=color) for name, color in list])
Dog.objects.exclude(exclude_params)
我有具有名称和颜色的 Dog 模型,并且我有包含我想要排除的狗的(名称、颜色)的元组列表。 我怎样才能实现一个查询集来过滤该列表中不存在的狗?
class Dog(BaseModel):
name = models.CharField(max_length=255)
color = models.CharField(max_length=255)
Dog.objects.all()
>> [<Dog: name='Lucky', color='Brown'>, <Dog: name='Lucky', color='White'>, <Dog: name='Maple', color='Brown'> ,<Dog: name='Maple', color='Black'>, <Dog: name='Maple', color='White'>]
_list = [('Maple', 'White'), ('Lucky', 'Brown')]
我要找的是这样的东西:
Dog.objects.custom_exclude(_list)
>> [<Dog: name='Lucky', color='White'>, <Dog: name='Maple', color='Brown'> ,<Dog: name='Maple', color='Black'>]
这应该可以完成工作。
import operator
from functools import reduce
from django.db.models import Q
exclude_params = reduce(operator.or_, [Q(name=name, color=color) for name, color in list])
Dog.objects.exclude(exclude_params)