我有一个带有属性的模型,我想要命令管理模型。
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,因为它是属性?在此先感谢您的帮助!
答案 0 :(得分:0)
给这个链接一个镜头,因为它可能有你的答案。 https://stackoverflow.com/a/8478586/1011998
简而言之,由于您尝试排序的属性在SQL中不存在,因此SQL必须返回所有结果,然后由您的属性在Python中对它们进行排序。可以想象,这个速度要慢得多。
我建议将字段“total”作为字段存储在数据库中作为非规范化字段(int),并且只要通过覆盖save()
方法更新用户对象,就可以更新它。这样你就可以从不必不断地动态重新计算总数的速度中获益(这将在以后使用中大数据时成为SQL),以及MySQL索引的速度(总是考虑你的“在哪里”)和“order by”条款是)。