Django自递归ManyToManyField过滤查询

我有一个这样的模型:

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)  

它的工作方式如下,一个活动可以链接到自己,父活动称为“活动”,子活动/活动将被称为“任务/任务”

如何过滤模型以获取所有“活动”以及如何过滤模型以获取所有“任务”?

谢谢你的帮助.

最佳答案 干得好:

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,你可以在没有注释的情况下获得更好的性能,但我现在无法回想起或快速谷歌它的语法.

点赞