使用python / django计算模型字段实例的唯一或不同值

问题描述

试图显示数据库中存在的字段的唯一实例数。在下面的模型中,“ uid”是用户ID#,用户可以在同一“ uid”下的数据库上创建多个记录。因此,如果我计算'uid的数量,我将仅获取数据库中创建的所有记录的数量但是我试图获取数据库中存在的唯一'uid'的数量被.count(),Count和.distinct()弄得一团糟。我对distinct = True选项也很困惑。这是为了向分析仪表板提供数据,因此我想计算数据库中存在的不同用户数量

models.py

class Session(models.Model):
    uid = models.CharField(max_length=50,blank=True)
    cid = models.CharField(max_length=50,blank=True)  # switched from eid
    client = models.CharField(max_length=50,blank=True)

views.py

class DashboardListView(LoginrequiredMixin,ListView):
    model = Session
    template_name = 'blog/dashboard.html'

    def get_queryset(self):
        user = get_object_or_404(User,username=self.kwargs.get('username'))
        return Session.objects.filter(client=user).order_by('-session_date')

    def get_context_data(self,**kwargs):
        user = get_object_or_404(User,username=self.kwargs.get('username'))
        context = super().get_context_data(**kwargs)
        context['total_records'] = Session.objects.filter(client=user).count()  # count function
        return context

html标记

{{ total_records }}

模型会话中的sqlite数据库记录示例

uid | cid |客户

001 | abc | DummyCo

001 | abc | DummyCo

001 | xyz | DummyCo

002 | xyz | DummyCo

002 | abc | DummyCo

003 | abc | DummyCo

因此,所需的输出将是:

不同的uid:3

区别cid:2

在这种情况下,客户端始终是相同的。)

请明确一点:我不需要,需要计数“ 001”被列为“ uid”的次数,我需要知道数据库中存在多少个不同的“ uid”。

解决方法

如@sabiwara所述,此问题之前已得到回答。我只是想把我的最终代码行放在这里,因为我有一个更简单的用例,它可能会在将来对某人有所帮助。

这是调整后的views.py部分,我在其中添加了新代码行

    def get_context_data(self,**kwargs):
        user = get_object_or_404(User,username=self.kwargs.get('username'))
        context = super().get_context_data(**kwargs)
        session_list = list(context['sessions'])  # evaluates the query
        context['total_users'] = Session.objects.filter(client=user).values('uid').distinct().count() # new code line
        context['sessions'] = session_list
        return context

** html标签**

{{ total_users }}