Django排除了问题

时间:2016-06-17 12:11:10

标签: django

任何人都可以向我解释这个吗?

class EventBlock(models.Model):
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)

class EventSlot(models.Model):
    event_block = models.ForeignKey(EventBlock)

>>> EventSlot.objects.count()
>>> 446

>>> EventSlot.objects.filter(event_block__created_by__groups__name='Manager').count()
>>> 438

>>> EventSlot.objects.exclude(event_block__created_by__groups__name='Manager').count()
>>> 446

当然,如果过滤器上有438个匹配项,那么排除应该删除那些438个匹配项,留下8个匹配项?但它没有删除任何比赛。我很困惑。

1 个答案:

答案 0 :(得分:0)

我认为您可能会得到意想不到的结果,因为created_by用户属于其他群组以及“经理”群组。

您可以先通过获取经理列表重新排列查询。

managers = User.objects.filter(groups__name='Manager')
EventSlot.objects.filter(event_block__created_by__in=managers)
EventSlot.objects.exclude(event_block__created_by__in=managers)