Django管理员列表视图阻止选项查找


class CustomerChoices(object):
def expensive_lookup(self):
....
def __iter__(self):
yield from [(a.number, a.display) for a in self.expensive_lookup()]

class CustomerProfile(models.Model):
account_number = models.IntegerField(unique=True, choices=CustomerChoices())
...
from django.contrib import admin
from .models import CustomerProfile

@admin.register(CustomerProfile)
class CustomerProfileAdmin(admin.ModelAdmin):
list_display = ('account_number', ...)

给定上面的代码,虽然我对添加/编辑管理员使用这些选项感到满意,但我如何防止django管理员列表视图使用这些选项,这样就不会进行昂贵的查找?请注意,我知道缓存方法,但如果我只想显示帐号怎么办?

问题

当您将list_display = ('account_number', ...)放入模型管理中时,Django将获取"显示值">通过评估的选择是可迭代的,并且注意这个";显示值">不属于数据库,因此必须进行选择评估。

解决方案

你有两个选择,

  1. 显示数据库中的存储值
  2. 保持原状

对于第一个解决方案,您可以将自定义可调用列表方法定义为

@admin.register(CustomerProfile)
class CustomerProfileAdmin(admin.ModelAdmin):
list_display = ('account_number_dup',)
def account_number_dup(self, model_instance: CustomerProfile):
return model_instance.account_number

JPG的答案对于文本或数字似乎是可以的。

但是对于布尔值,结果显示的值是TrueFalse,而不是Django通常显示的图像。

最新更新