【发布时间】:2012-01-03 20:23:45
【问题描述】:
为ModelAdmin 类定义list_display 数组时,如果给定BooleanField 或NullBooleanField,UI 将使用漂亮的图标而不是列中的True/False 文本。但是,如果给出了返回布尔值的方法,它只会打印出 True/False。
有没有办法让它使用漂亮的图标作为布尔方法?
【问题讨论】:
标签: django django-admin
为ModelAdmin 类定义list_display 数组时,如果给定BooleanField 或NullBooleanField,UI 将使用漂亮的图标而不是列中的True/False 文本。但是,如果给出了返回布尔值的方法,它只会打印出 True/False。
有没有办法让它使用漂亮的图标作为布尔方法?
【问题讨论】:
标签: django django-admin
这已记录在案,虽然有点难找 - 从here 往下走几个屏幕,你会发现:
如果给定的字符串是模型的方法,ModelAdmin 或返回 True 或 False 的可调用对象,如果你给方法一个值为
boolean的属性,Django 将显示一个漂亮的“on”或“off”图标987654324@.
给出的例子是:
def born_in_fifties(self):
return self.birthday.strftime('%Y')[:3] == '195'
born_in_fifties.boolean = True
【讨论】:
感谢@daniel-roseman (rtfm)
从 Django 3.2 there is a decorator @admin.display(boolean=True):
如果给出的字符串(
list_display)是模型的方法,ModelAdmin或返回True、False或None的可调用对象,Django 如果您将 带有display()装饰器的方法传递boolean参数 值设置为True:
class Person(models.Model):
birthday = models.DateField()
@admin.display(boolean=True)
def born_in_fifties(self):
return 1950 <= self.birthday.year < 1960
【讨论】:
我让这个为我工作 (Django 3.1.10)
class MyAdmin(MyModel):
list_display = ("field_as_boolean", )
def field_as_boolean(self, obj):
return True if obj.field else False
field_as_boolean.boolean = True
field_as_boolean.short_description = "field_name"
【讨论】: