Django Admin中的注释

时间:2019-06-11 12:21:48

标签: 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。

这是我的管理员。

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

2 个答案:

答案 0 :(得分:0)

models.py

from django.db import models

class MyModel(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
    visited = models.PositiveIntigerField(default=0)

signals.py

def pre_save_user(sender, instance, *args, **kwargs):
    if MyModel.objects.filter(user=instance.user).exists():
        instance.visited = instance.visited + 1

pre_save.connect(pre_save_user, sender=MyModel)

答案 1 :(得分:0)

假设您的模型如下所示。

models.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来查询集,然后尝试为每个{{1} }。

admin.py

visit_count