django - 我需要在 Django 管理站点中显示摘要报告。如何计算性别状态为 0 或 1 的用户数

标签 django python-3.x django-admin

我正在覆盖 change_list.html,这是我的 admin.py 文件中的内容。

class MyHelperGenderAdmin(admin.ModelAdmin):
    change_list_template = 'admin/helper_chart_change_list.html'
    date_hierarchy = 'created_at'
    list_filter = ('gender', 'created_at')

    def changelist_view(self, request, extra_context=None):
        response = super().changelist_view(request, extra_context=extra_context, )
        try:
            qs = response.context_data['cl'].queryset
        except (AttributeError, KeyError):
            return response

        metrics = {
            'male': Count('gender', gender=1),
            'female': Count('gender', gender=0),
            'total_helpers': Count('id')
        }

        response.context_data['helper'] = list(
            qs.values('gender').annotate(**metrics).order_by('-male')
        )
        return response

    def has_add_permission(self, request):
        return False


admin.site.register(MyHelperChart, MyHelperGenderAdmin)

在我的指标字典中,我需要一种方法来计算性别为 0 或 1 的位置。目前,count 方法计算关于性别状态的所有内容。

这是我的模型:

class Helper(auth.models.User):
    MALE = 1
    FEMALE = 0

    GENDER_CHOICES = (
        (MALE, 'Male'),
        (FEMALE, 'Female')
    )
    phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$',
                                 message=
                                 "Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed."
                                 )
    phone_number = models.CharField(validators=[phone_regex], max_length=15, blank=True, unique=True, null=True)
    gender = models.IntegerField(choices=GENDER_CHOICES, default=MALE, null=True)
    birthdate = models.DateField(blank=True, null=True)
    facebook_id = models.CharField(max_length=200, blank=True, null=True)
    google_id = models.CharField(max_length=200, blank=True, null=True)
    lng = models.FloatField(blank=True, null=True)
    lat = models.FloatField(blank=True, null=True)
    country = models.ForeignKey(Country, blank=True, null=True)
    image = models.ImageField(
        upload_to=upload_location,
        null=True, blank=True,
        width_field="width_field",
        height_field="height_field")
    height_field = models.IntegerField(default=0)
    width_field = models.IntegerField(default=0)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now=False, auto_now_add=True)

    class Meta:
        verbose_name_plural = "Helpers"

    def __str__(self):
        return self.first_name


class MyHelperChart(Helper):
    class Meta:
        proxy = True
        verbose_name = 'Helper Gender Summmary'
        verbose_name_plural = 'Helpers Gender Summaries'

我已经创建了一个代理模型,我将在我的 Django 管理中使用它来显示数据摘要和图表。

最佳答案

您需要做的就是为男性和女性指标添加一个案例。这是一个例子,然后你可以对 female = 0 做同样的事情:

from django.db.models import Case, When, IntegerField

class MyHelperGenderAdmin(admin.ModelAdmin):

...

metrics = {
   ...
   'male': Count(Case(
                When(gender = 1, then = 1),
                output_field = IntegerField())),
   ...
   }

关于django - 我需要在 Django 管理站点中显示摘要报告。如何计算性别状态为 0 或 1 的用户数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47221761/

相关文章:

linux - 如果里面只有一个文件,需要在 linux 中创建带有数据库行 ID 的目录吗?

python - 如何验证 DRF 中的更新字段?

python - 在加载图层的函数最终加载图层之后,如何调用函数?

django - 有没有办法在管理搜索中搜索多个术语? Django

python - Django hook 根据站点拒绝用户访问管理员

Django 信号 - kwargs ['update_fields' ] 在通过 django admin 进行模型更新时始终为 None

python - Django AUTHENTICATION_BACKENDS 导入错误

python - 正则表达式:匹配字符串开头以外的字符

python - Pandas ExcelWriter(...,engine ='odf' ) - 没有名为 odf 的模块

django - 在 Django 管理页面中向用户个人信息添加字段