所以我有一组可以出现在许多类别中的任务:
class TaskGroup(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=200)
icon = models.CharField(max_length=200, blank=True, null=True)
def __unicode__(self):
return unicode(self.name)
class Task(models.Model):
start_date = models.DateField()
end_date = models.DateField()
is_date_fuzzy = models.BooleanField()
name = models.CharField(max_length=200)
assignee = models.ForeignKey(User, verbose_name="users who is assigned the task", blank=True, null=True)
task_groups = models.ManyToManyField(TaskGroup)
如您所见,每个任务都可以出现在多个任务组中。
我希望我的查询满足以下条件:
- 应返回所有任务组的列表。
- 特定组内任务数的计数。即家具(3),床上用品(2),落地灯(6)
- 如果特定任务组没有任务,则该组应该有 0
- 每个组内的任务由当前用户限制。
到目前为止,我想出的最好的是这样的:
TaskGroup.objects.filter(
task__assignee=current_usr
).annotate(
task_count=Count('task__id')
).order_by('name')
但它会在进行计数之前过滤所有内容,因此我看不到任务组为零的任务组。
也许我很想,但我多年来一直在尝试这样做,而我在这个阶段只是想循环并自己数数。
我真的希望你能帮助拯救我的理智所剩无几!