【问题标题】:Django: Order AdminModel by Custom PropertyDjango:按自定义属性订购 AdminModel
【发布时间】:2013-04-13 10:11:13
【问题描述】:

我有一个具有属性的模型,我希望 adminmodel 由该属性排序。

class StoreAdmin(admin.ModelAdmin):
    list_display = ('user', 'total',)

admin.site.register(Store, StoreAdmin)

型号:

class Store(models.Model):
    user = models.ForeignKey(User, related_name="store")

    @property
    def total(self):
        num = 0
        for x in Coins.objects.all():
            num += x.value
        return num

ModelAdmin 是一个属性,如何按总数排序?提前感谢您的帮助!

【问题讨论】:

  • #django 的一个解决方案:Store.objects.annotate(total=Sum('counts__value')).order_by('total')
  • 我的回答解决了你的问题吗?谢谢。

标签: django django-models django-admin django-modeladmin


【解决方案1】:

试一试这个链接,因为它可能有你的答案。 https://stackoverflow.com/a/8478586/1011998

简而言之,由于您尝试排序的属性在 SQL 中不存在,因此 SQL 必须返回所有结果,然后在 Python 中按您的属性对它们进行排序。可以想象,这要慢得多。

我建议考虑将字段“total”作为非规范化字段 (int) 存储在数据库中的字段中,并通过覆盖 save() 方法在更新用户对象时简单地更新它。这样,您就可以从不必不断地动态重新计算总数的速度(稍后在处理中大数据时变成 SQL)和 MySQL 索引的速度(始终考虑您的“位置”)中受益。和“order by”子句)。

【讨论】:

    猜你喜欢
    • 2017-04-18
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多