小编pip*_*pip的帖子

Django ORM中多个到多个字段的复杂计数

所以我有一组可以出现在许多类别中的任务:

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)
Run Code Online (Sandbox Code Playgroud)

如您所见,每个任务都可以出现在多个任务组中.

我希望我的查询满足以下条件:

  1. 应返回所有TaskGroup的列表.
  2. 特定组中任务数量的计数.即家具(3),床上用品(2),落地灯(6)
  3. 如果特定TaskGroup没有任务,则该组应该为0
  4. 每个组中的任务仅限于当前用户.

到目前为止我提出的最好的是这样的:

TaskGroup.objects.filter(
    task__assignee=current_usr
).annotate(
    task_count=Count('task__id')
).order_by('name')
Run Code Online (Sandbox Code Playgroud)

但它在进行计数之前会过滤掉所有内容,因此我看不到任务组的任务为零.

也许我正在思考但是我已经尝试过这么多年了,我现在正处于试图循环并自己做计算的时候.

我真的希望你能帮我节省一点我的理智!

sql django django-models django-aggregation

5
推荐指数
1
解决办法
395
查看次数

标签 统计

django ×1

django-aggregation ×1

django-models ×1

sql ×1