当前位置: 首页 > 面试题库 >

Django Admin:如何按没有数据库字段的自定义list_display字段之一进行排序

耿锦
2023-03-14
问题内容

class CustomerAdmin(admin.ModelAdmin):
list_display = (‘foo’, ‘number_of_orders’)

models.py

class Order(models.Model):
bar = models.CharField[…]
customer = models.ForeignKey(Customer)

class Customer(models.Model):
foo = models.CharField[…]
def number_of_orders(self):
return u’%s’ % Order.objects.filter(customer=self).count()
如何根据客户对客户进行分类number_of_orders?

admin_order_field属性不能在这里使用,因为它需要一个数据库字段进行排序。由于Django依赖底层数据库执行排序,这有可能吗?创建一个包含订单数量的汇总字段似乎在这里是过大的。

有趣的是:如果您在浏览器中手动更改url以在此列上进行排序-它将按预期工作!


问题答案:

我喜欢Greg解决此问题的方法,但我想指出,你可以直接在管理员中执行相同的操作:

from html" target="_blank">django.db import models

class CustomerAdmin(admin.ModelAdmin):
    list_display = ('number_of_orders',)

    def get_queryset(self, request):
    # def queryset(self, request): # For Django <1.6
        qs = super(CustomerAdmin, self).get_queryset(request)
        # qs = super(CustomerAdmin, self).queryset(request) # For Django <1.6
        qs = qs.annotate(models.Count('order'))
        return qs

    def number_of_orders(self, obj):
        return obj.order__count
    number_of_orders.admin_order_field = 'order__count'

这样,你只需在管理界面内进行注释。并非与你执行的每个查询有关。



 类似资料:
  • 我正在试验MongoDB及其聚合框架。对于一个数组中的多个文档,我可以使用一个数组来拆分文档。现在,如果数组中的数据没有自然排序顺序,我如何在MongoDB中对其进行排序? 例子: 产品集合包含以下文档(_id字段省略) 按字段展开采集数据后,结果如下: size字段没有自然排序,例如XL和XS是相邻排序的,尽管它们应该排序到第一位/最后一位。 我想通过首先将每个大小投影到相应的数字来解决这个问题

  • 我们使用可比接口对ArrayList进行排序,但我如何修改可比接口的CompareTo函数以根据浮点字段对数组列表进行排序,因为该函数返回int。 我试图按用户评级(浮动数据类型)对电影数据进行排序。下面是我创建的类,用于保存通过Json提要从网络调用获得的不同值。

  • 介绍 model 参考文档已经介绍了如何使用 Django 的标准字段类;例如 CharField, DateField,等等。对于很多应用来说,这些类足够用了。 但是在某些情况下, 你所用的Django 不具备你需要的某些精巧功能,或是你想使用的字段与 Django 自带字段完全不同。 Django 内置的字段类型并不能覆盖所有可能遇到的数据库的列类型,仅仅是些普通的字段类型,例如VARCHAR

  • 我想根据数字字段对搜索结果进行排序。在下面的示例代码中,我希望基于'Age'字段进行排序。我从以下答案开始: [如何在Lucene 6中对IntPont或LongPoint字段进行排序 [在Lucene中根据数字字段对搜索结果进行排序 我在搜索函数中将sortfield.type.score更改为sortfield.type.long。但我得到: 意外的docvalues为字段“年龄”键入NONE

  • 我有一个前端ACF表单-ACF_表单()。使用post对象字段。我想通过自定义字段限制查询结果。下面的代码可以正常工作,除了当我尝试在搜索栏中键入时,会出现以下错误:我得到的错误是ajax响应中的PHP错误; 0:“PhpConsole\Handler”- 1:"strpos()" 2:"acf_order_by_search()" 3:“acf_field_post_object- 4:“acf

  • 我需要按字段“priority”(定义为文本)对bucket进行排序,但我不知道该怎么做。 你介意帮我做这件事吗? 我尝试过bucket_sort,但ES给出了一个关于类型的错误,与sort和order相同。 这是聚合查询 结果示例如下: 我想按索引中定义为文本的字段“优先级”对存储桶聚合(asc/desc)进行排序