在Django管理员更改列表中,如何显示空格而不是默认的“(无)”?

时间:2015-01-27 16:09:48

标签: django null django-admin changelist

当数据库中的字段为空时,Django会在显示更改列表时插入“(None)”来保留null的位置。虽然是描述性的,但是当更改列表中有很多字段时,它会让所有内容都非常繁忙,因为空白字段会有所帮助但更不会混乱。那么有没有办法改变Django用于表示变更列表中的空字段的文本?如果解决方案是特定于模式的管理员或管理员范围,则无关紧要。

还应该添加我知道您定义自定义字段然后输出空字符串的解决方案。这是有效的,但是在使列不可移动时,这是显示之前的优先级,所以它不是一个选项。

2 个答案:

答案 0 :(得分:12)

从Django 1.9开始,此行为已更改,并添加了一些自定义功能以支持您所描述的情况的解决方案。

使用Django 1.9,Django现在使用了' - ' (破折号)代替"(无)"在Django管理员中显示NULL。

此外,您现在可以自定义此默认设置' - ' (破折号)显示Django管理员的empty_value_display:全局,特定管理类或特定字段:

全局:

# In settings.py to show '???' instead of '-' for all null django admin values
from django.contrib import admin
admin.site.empty_value_display = '???'

对于Django管理类中的所有字段:

# admin.py to show "Unknown Item field" instead of '-' for null values in all Item fields
class ItemAdmin(admin.ModelAdmin):
    empty_value_display = 'Unknown Item field'

对于单个字段:

# admin.py to show "No known price" instead of '-' just for null price values in Item
class ItemAdmin(admin.ModelAdmin):
    list_display = ('name','price_view')
    def price_view(self, obj):
         return obj.price
    price_view.empty_value_display = 'No known price'

答案 1 :(得分:8)

您可以使用此解决方法覆盖单个ModelAdmin行为:

from django.contrib.admin.views import main
...
...
...
class MyModelAdmin(admin.ModelAdmin):
    def __init__(self,*args,**kwargs):
        super(MyModelAdmin, self).__init__(*args, **kwargs)
        main.EMPTY_CHANGELIST_VALUE = '-'

注意:覆盖__init__()@admin.register()装饰器不相容,相反,您需要在admin.site.register(Model, ModelAdmin)课程后调用Model定义