4

我有一个这样的模型:

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)  

它是这样工作的,一个活动可以链接到它自己,父活动被称为“活动”,子活动/活动将被称为“任务/任务”

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

感谢所有的帮助。

4

2 回答 2

1

获取所有顶级活动:

Activity.objects.filter(activity__isnull=True)

这是抓取所有上面没有父活动的活动。

要获取所有任务、子任务等(上面有父活动的那些):

Activity.objects.filter(activity__isnull=False)
于 2012-03-31T05:14:31.560 回答
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,但我现在无法回忆或快速搜索它的语法。

于 2010-06-30T18:58:32.893 回答