Django:按Custom Property订购AdminModel

时间:2013-04-19 22:29:14

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

我有一个带有属性的模型,我想要命令管理模型。

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,因为它是属性?在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

我建议将字段“total”作为字段存储在数据库中作为非规范化字段(int),并且只要通过覆盖save()方法更新用户对象,就可以更新它。这样你就可以从不必不断地动态重新计算总数的速度中获益(这将在以后使用中大数据时成为SQL),以及MySQL索引的速度(总是考虑你的“在哪里”)和“order by”条款是)。