プロジェクトとアクションの 2 つのモデルがあります。
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 より大きいプロジェクト、またはアクションのないプロジェクトを返したい場合はどうすればよいですか?