有时不希望为布尔字段显示“开/关”图标。
例子:
error
当出现错误或blocked=True
显示为绿色的“ok”,同时显示为blocked=False
“禁止进入”标志。
在这种情况下,最好保留原始True
/False
行为。
有没有比创建一个返回例如self.error
并添加short_description
,ordering
等的特殊方法更优雅的方法?
有时不希望为布尔字段显示“开/关”图标。
例子:
error
当出现错误或blocked=True
显示为绿色的“ok”,同时显示为blocked=False
“禁止进入”标志。在这种情况下,最好保留原始True
/False
行为。
有没有比创建一个返回例如self.error
并添加short_description
,ordering
等的特殊方法更优雅的方法?
使用此代码没有脏话admin.py
:
from mysite.models import Test
from django.contrib import admin
class TestAdmin(admin.ModelAdmin):
list_display = ('is_blocked_col',)
def is_blocked_col(self, obj):
return not obj.is_blocked # invert the boolean value
is_blocked_col.boolean = True
is_blocked_col.admin_order_field = 'is_blocked'
is_blocked_col.short_description = 'Is Blocked'
admin.site.register(Test, TestAdmin)
如果您使用此方法,它仍会显示开/关图标。如果is_blocked=True
thenreturn not obj.is_blocked
将根据您的需要返回False
显示为红色图标的内容。
编辑
如果您想使用文字True/False
而不是红色/绿色图标,您可以设置
is_blocked_col.boolean = False
在上面的代码中。
我检查了相应的 django 代码,不幸的是这种行为是硬编码的,所以唯一的解决方案是问题中提到的那个:
is_blocked = BooleanField(default=False)
def is_blocked_col(self):
return self.is_blocked
is_blocked_col.short_description = \
is_blocked_col.admin_order_field = 'is_blocked'
这比类似的可读性差得多
is_blocked = BooleanField(default=False)
is_blocked.boolean = False
(这不起作用)
或强制管理小部件force_unicode
或其他东西(我不知道如何实现)