代码之家  ›  专栏  ›  技术社区  ›  Sapna Sharma

Django Admin中的注释

  •  1
  • Sapna Sharma  · 技术社区  · 6 年前

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

    我想看看在Django管理,每个用户访问计数。到现在为止,我多次得到每个用户的名字,计数是1。

    这是我的管理员.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
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   mrzrm Dinesh kumar Mohanty    6 年前

    假设你的 模型

    型号.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 对于每个 .

    管理员.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
    
        2
  •  0
  •   mrzrm Dinesh kumar Mohanty    6 年前

    型号.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)
    

    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)