在Django管理控制台中为属性显示勾和叉图标
在Django的管理后台,如果某个字段是布尔类型(BooleanField)或者可空布尔类型(NullBooleanField),Django会用好看的“开”和“关”图标来代替简单的真(True)或假(False)。
现在,我的模型里其实没有布尔类型的字段,但我有一个属性(property),我想用这些图标来显示。不过,当我尝试这样做时,Django却报错说:'SomeAdmin.list_filter[0]' 指向 'is_activated',但它并不是一个字段。
请问有没有办法在不对Django进行太多修改的情况下,给这个字段显示这些漂亮的小图标呢?
谢谢!
2 个回答
7
在Django 3.0及以上版本中,正确的做法是使用 @admin.display
。
@admin.display( boolean=True, ordering='-publish_date', description='Is Published?', ) def is_published(self, obj): return obj.publish_date is not None
35
你不需要使用 list_filter
。你要找的属性是 list_display
。文档里有个例子,教你怎么创建一个看起来像布尔值的列。简单来说,你可以这样做:
在类里创建一个方法:
def is_activated(self) if self.bar == 'something': return True return False
在
is_activated
方法下面直接添加.boolean
方法属性:is_activated.boolean = True
把这个方法添加到
list_display
里:class MyAdmin(ModelAdmin):
list_display = ['name', 'is_activated']你会发现列名现在可能是 "Is Activated" 或类似的东西。如果你想改变列的标题,可以使用
short_description
方法属性:is_activated.short_description = "Activated"