gpt4 book ai didi

python - Django Admin,使用自定义函数排序

转载 作者:行者123 更新时间:2023-11-28 17:13:19 24 4
gpt4 key购买 nike

如何通过一些简单的自定义方法对 Django 管理中的列进行排序?
(我得到的所有答案都是通过使用 annotate 但我不知道如何使用它我的情况)。

假设模型

class Shots(models.Model):    
hits = models.PositiveIntegerField()
all = models.PositiveIntegerField()

在管理站点中,我想按hits to all 比率排序:

class ShotAdmin(admin.ModelAdmin):
list_display = ['ratio']

def ratio(self, obj):
return obj.hits / obj.all * 100

我知道 ratio 不是数据库中的一个字段,因此简单的 ratio.admin_order_field = 'ratio' 将不起作用,我需要以某种方式将其附加为一个字段但我不知道该怎么做。

最佳答案

通过关注:

我们可以为您的问题制定解决方案:

from django.db.models import F

class ShotsAdmin(admin.ModelAdmin):
list_display = ('get_ratio',)

def get_queryset(self, request):
qs = super(ShotsAdmin, self).get_queryset(request)
qs = qs.annotate(ratio=F('hits') * 100 / F('all'))
return qs

def get_ratio(self, obj):
return obj.ratio

get_ratio.admin_order_field = 'ratio'

解释:

  • get_queryset 方法将注释一个名为 ratio 的新字段以你的查询集。该字段的值是您的比率函数在 hitsall 字段上的应用。
  • get_ratio 函数从查询集实例返回上述字段。
  • 最后:get_ratio.admin_order_field = 'ratio'ratio 字段设置为管理面板上查询集的排序字段。

关于python - Django Admin,使用自定义函数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45921192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com