【发布时间】:2018-02-13 08:38:51
【问题描述】:
Django 1.11.4
我只想选择丢失物品的框架。 如果物品丢失,lost_day 不为空。
问题:如果出现“错误结果”,我无法理解发生了什么。我想说,它应该返回与 “正确结果” 相同的结果。你能帮我弄清楚它有什么问题吗?
错误的结果
>>> Frame.objects.all().exclude(item__lost_day__isnull=True)
<QuerySet [<Frame: 3>]>
正确结果:
>>> Frame.objects.all().filter(item__lost_day__isnull=False)
<QuerySet [<Frame: 1>, <Frame: 3>]>
自检
>>> a = Item.objects.get(pk=1)
>>> a.lost_day
datetime.date(1997, 1, 1)
>>> a.lost_day is None
False
>>> b = Item.objects.get(pk=2)
>>> b.lost_day
datetime.date(1997, 2, 2)
>>> b.lost_day is None
False
models.py
class Frame(models.Model):
pass
class Item(models.Model):
frame = models.ForeignKey(Frame,
blank=False,
on_delete=models.PROTECT,
verbose_name=_("frame"))
lost_day = models.DateField(auto_now=False,
auto_now_add=False,
blank=True,
null=True,
verbose_name=_("lost"))
【问题讨论】:
标签: django django-queryset django-orm