我有两个模型,一个项目和一个动作:
class Project(models.Model):
name = models.CharField("Project Name", max_length=200, unique = True)
class Action(models.Model):
name = models.CharField("Action Name", max_length=200)
project = models.ForeignKey(Project, blank=True, null=True, verbose_name="Project")
notes = models.TextField("Notes", blank=True)
complete = models.BooleanField(default=False, verbose_name="Complete?")
status = models.IntegerField("Action Status", choices = STATUS, default=0)
我需要一个查询来返回所有没有状态 < 2 的操作的项目。
我试过:
Project.objects.filter(action__status__gt = 1)
但这会返回所有项目,因为在每个项目中,都有一些状态为 2 的操作和一些状态小于 2 的操作。此外,它在结果查询中重复了项目。我目前的解决方案如下:
Project.objects.filter(action__status__gt =1).exclude(action__status__lt =2).annotate()
这会折叠重复的结果并仅显示动作状态大于 1 的动作。但这是构造此类查询的正确方法吗?如果我想返回操作状态大于 1 的项目或没有操作的项目怎么办?