【问题标题】:How to Count distinct rows over two ManyToMany Fields如何计算两个多对多字段上的不同行
【发布时间】:2020-09-24 09:47:30
【问题描述】:
from django.db import models

class Group(models.Model):
  users = models.ManyToMany(User, blank=True, related_name="groups"


class Task(models.Model):
  users = models.ManyToManyField(User, blank=True, related_name="personal_tasks")
  groups = models.ManyToManyField(Group, blank=True, related_name="group_tasks")

注意:上面的代码是为了演示概念,它不是正在使用的代码。

那么以上面的模型为例,是否有可能(最好使用单个查询)获得唯一用户的总数?

我最初只是想将 users 字段和 groups__users 字段的计数相加,但是,我想考虑到有人亲自和通过他们的小组分配任务的可能性。

【问题讨论】:

  • 所以您想获取组中唯一用户的数量对吗?
  • 使用 Through 属性,再创建一个表(如果没有指定,django 会自动创建),假设你叫它GroupUser,然后使用过滤器:GroupUser.objects,filter(group=gid).distinct()
  • @CharanjitSingh 但 OP 可能还需要来自 Tasks.users 的用户,并将这些用户与 Tasks.groups.users 结合起来,然后得到一个独特的。
  • @shad0w_wa1k3r 是的,这就是我需要做的。
  • what 的唯一用户总数?对于单个任务?每个任务?你如何计算用户数?只有users,还是groups 中的那些?

标签: python django many-to-many django-orm


【解决方案1】:

如果你使用基于 CBv 类的视图!!

在 Views.py 中:

class yourclass(ListView):
    model = YourModel
    template_name = '....'
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['Count_Somthing'] = YourModel.objects.all().count()
        return context   

在您的模板 html 中使用:{{Count_Somthing}}

如果你使用 Function :使用过滤器很容易

def Your_Fonction(request):
    search_for= YourModel.objects.get(any_fields= pk)
    Count_Somthing=search_for.count()
  return(request,'....html',Count_Somthing)

在您的模板 html 中使用:{{Count_Somthing}}

【讨论】:

  • 这不是最优的,这也是 O(n)
  • 请再读一遍这个问题,他要求的是查询,而不是查看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
相关资源
最近更新 更多