Django 查询集 - 排除 True 值

问题描述 投票:0回答:1

我正在尝试构建一个仅添加错误值的查询集。

型号

Models
reference = models.CharField(validators=[MinLengthValidator(15)], max_length=25, primary_key=True)
h0730 = models.BooleanField(default=False)
h0800 = models.BooleanField(default=False)
h0830 = models.BooleanField(default=False)
h0900 = models.BooleanField(default=False)
h0930 = models.BooleanField(default=False)
h1000 = models.BooleanField(default=False)
h1030 = models.BooleanField(default=False)
h1100 = models.BooleanField(default=False)
h1130 = models.BooleanField(default=False)
h1200 = models.BooleanField(default=False)
h1230 = models.BooleanField(default=False)
h1300 = models.BooleanField(default=False)
h1330 = models.BooleanField(default=False)
h1400 = models.BooleanField(default=False)
h1430 = models.BooleanField(default=False)
h1500 = models.BooleanField(default=False)
h1530 = models.BooleanField(default=False)
delivery_date = models.CharField(max_length=8)
is_cancelled = models.BooleanField(default=False)

观点

taken_slots = Order.objects.filter(delivery_date__exact=delivery_date).filter(reference__icontains=code).filter(is_cancelled=False)

slots_remaining = ['h0730', 'h0800', 'h0830', 'h0900', 'h0930', 'h1000', 'h1030', 'h1100', 'h1130', 'h1200', 'h1230', 'h1300', 'h1330', 'h1400', 'h1430', 'h1500', 'h1530']

for slot in taken_slots:
    if slot.h0730 and 'h0730' in slots_remaining:
        slots_remaining.remove('h0730')
    if slot.h0800 and 'h0800' in slots_remaining:
        slots_remaining.remove('h0800')
        ...
        ...

上面的 for 循环按预期工作,但我正在尝试优化该过程。例如,如果当天有 100 个引用,“taken_slots”将被迭代 100 次。

for 循环完成后的预期输出是“slots_remaining”列表将仅剩余 False 值,例如

ref1 = h0730 and h0930 is True and every other slot False
ref2 = h0900 is True and every other slot False
ref3 = h1030 is True and every other slot False
ref4 = h1230 is True and every other slot False
ref5 = h1300 and h1330 is True and every other slot False
ref6 = h1500 is True and every other slot False

If h0730, h0900, h0930, h1030, h1230, h1300, h1330, h1500 from the 6 references are True.
slots_remaining must remain with ['h0800', 'h0830', 'h1000', 'h1100', 'h1130', 'h1200', 'h1400', 'h1430', 'h1530']

有没有办法直接从 take_slots 查询构建 slot_remaining 列表,或者至少避免 for 循环。我已经看到过不同、注释和联合的例子,但可能做错了,因为我还没有设法让它工作。

python django django-models django-views
1个回答
0
投票

其实我没明白你上一段说的是什么。但您可以像这样使用排除功能:

exclude_param = {item: False for item in slots_remaining}
taken_slots = taken_slots.exclude(**exclude_param)

我希望它对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.