Sap*_*rma 5 django django-models django-admin
我有一个模型如下:
.......
user=models.ForeignKey(settings.AUTH_USER_MODEL,null=True,blank=True)
visited = models.CharField(max_length=15)
......
Run Code Online (Sandbox Code Playgroud)
我想在 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']
Run Code Online (Sandbox Code Playgroud)
我在管理模板中得到以下结果。
user visit_count
1 1
1 1
2 1
2 1
Run Code Online (Sandbox Code Playgroud)
但我应该得到如下结果。
user visit_count
1 2
2 2
Run Code Online (Sandbox Code Playgroud)
假设您的模型如下所示。
模型.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)
Run Code Online (Sandbox Code Playgroud)
因此,您可以values在查询集上使用属性,以便首先GROUP BY基于查询集user,然后尝试聚合visit_count每个user。
管理员.py
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
Run Code Online (Sandbox Code Playgroud)
小智 -1
模型.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)
Run Code Online (Sandbox Code Playgroud)
信号.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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |