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

どうぞ:

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 に答える
1

トップレベルのアクティビティをすべて取得するには:

Activity.objects.filter(activity__isnull=True)

これは、上位に親アクティビティがないすべてのアクティビティを取得しています。

すべてのタスク、サブタスクなど (それらの上に親アクティビティがあるもの) を取得するには:

Activity.objects.filter(activity__isnull=False)
于 2012-03-31T05:14:31.560 に答える