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

In the Django admin changelist, how do I display a blank space instead of the default "(None)"?

当数据库中的字段为空时,Django 会在显示更改列表时插入“(None)”以保留空的位置。虽然是描述性的,但当更改列表上有很多字段时,它会让所有内容看起来都非常忙碌,而空白字段同样有用,但不会那么混乱。那么有什么方法可以更改 Django 用于表示更改列表中的空字段的文本吗?解决方案是模型管理员特定的还是管理员范围的都没有关系。

还应该补充一点,我知道您定义自定义字段然后输出空白字符串的解决方案。这行得通,但会使列无法排序,这是显示之前的优先级,所以它不是一个选项。

您可以使用此解决方法覆盖单个 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) 14=] class 已定义。

从 Django 1.9 开始,此行为已发生变化,并添加了一些自定义功能以支持针对您描述的情况的解决方案。

在 Django 1.9 中,Django 现在使用“-”(破折号)而不是“(None)”在 Django 管理中显示 NULL。

此外,您现在可以使用 empty_value_display 为 Django 管理员自定义此默认“-”(破折号)显示:全局,针对特定管理员 class 或特定字段:

全球:

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

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

# 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'