根据数量进行过滤

时间:2020-02-24 05:42:27

标签: python django

我的模型定义如下:

class Employee(models.Model):
  ...
  user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)

class Project(models.Model):
  ...
  employees = models.ManyToManyField(Employee, null=True, blank=True)

我正在尝试检索所有至少分配了一名员工的项目,但是我不知道怎么做。我尝试了以下操作:

projects.filter(employees__gt=0)

其中projects = Project.objects.all(),但我认为这不是正确的查询,因为如果我执行projects.filter(employees_lte=0),即使我没有分配任何员工的项目,它也不会返回任何内容。我如何找回我要寻找的东西?您能否指向我可以找到所有可以使用的查找的页面? 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用isnull这样尝试:

Project.objects.filter(employees__isnull=False)

更新

如果您要检查特定数量的员工,也许可以尝试这样

from django.db.models import Count

Project.objects.annotate(employee_count=Count('employees')).filter(employee_count__gt=5)