我有一个这样的模型:
class Activity(models.Model):
title = models.CharField(max_length=200)
summary = models.TextField(null=True, blank=True)
tasks = models.ManyToManyField('self', symmetrical=False, null=True, blank=True)
它的工作方式如下,一个活动可以链接到自身,父活动称为“活动”,子活动/活动将被称为“任务/任务”
如何过滤模型以获取所有“活动”以及如何过滤模型以获取所有“任务”?
感谢所有帮助。
答案 0 :(得分:1)
你走了:
from django.db.models import Count
annotated_qs = Activity.objects.annotate(num_tasks=Count(tasks))
activities = annotated_qs.objects.filter(num_tasks=0)
tasks = annotated_qs.objects.filter(num_tasks__gt=0)
:)
如果你使用__is_null=True
,你可以在没有注释的情况下获得更好的性能,但我现在无法回想起或快速谷歌它的语法。
答案 1 :(得分:1)
获取所有顶级活动:
Activity.objects.filter(activity__isnull=True)
这是抓住所有没有父活动的活动。
获取所有任务,子任务等(那些父项活动高于它们的那些):
Activity.objects.filter(activity__isnull=False)