django - Django Admin 中的注解

标签 django django-models django-admin

我有一个模型如下:

.......
user=models.ForeignKey(settings.AUTH_USER_MODEL,null=True,blank=True)
visited = models.CharField(max_length=15)
......

我想在 Django admin 中查看每个用户的访问次数。截至目前,我多次获得每个用户的姓名,计数为 1。

这是我的 admin.py。
class modelnameadmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super(modelnameadmin, self).get_queryset(request)
        return qs.annotate(visit_count=Count('visited',distinct=True)).order_by('visit_count')

    def visit_count(self, inst):
        return inst.visit_count

    list_display = ['user','visit_count']

我在管理模板中得到以下结果。
user      visit_count
1          1
1          1
2          1
2          1

但我应该得到如下结果。
user      visit_count
1          2
2          2

最佳答案

假设您的模型如下所示。

模型.py

from django.db import models
from django.contrib.auth.models import User

class MyModel(models.Model):
    user = models.ForeignKey(User, null=True, blank=True)
    visit_count = models.PositiveIntigerField(default=0)

所以你可以使用 values您查询集上的属性,以便 GROUP BY基于 user 的查询集首先,然后尝试聚合 visit_count每个user .

管理文件
from django.db.models.aggregates import Sum
from django.contrib import admin

from .models import MyModel

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    list_display = ['user', 'visit_sum']

    def get_queryset(self, request):
        queryset = super(MyModelAdmin, self).get_queryset(request)
        return queryset.values('user').annotate(visit_sum=Sum('visit_count')).order_by('-visit_sum')

    def visit_sum(self, obj):
        return obj.visit_sum

关于django - Django Admin 中的注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56543633/

相关文章:

python - 在 django 中获取空查询集的类名

python - Django Python - 在公共(public) header 中添加表值

Python - 登录后Django站点管理页面为空

django-models - 如果有值,如何在django admin中有条件地显示字段?

css - 带有 Apache2 的 Django 管理页面

python - 是否可以在 ValidationError 的字符串中使用模板标签?

python - 打包一个django项目及其依赖为standalone "product"

python - 如何在 Django 中进行不区分重音的 TrigramSimilarity 搜索?

python - Django:通过模型自动生成的 StackedInline 更友好的 header ?

Python/Django "BadStatusLine"错误