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

mee*_*son 7 django null django-admin changelist

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

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

D R*_*bio 16

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

使用Django 1.9,Django现在使用' - '(破折号)而不是"(无)"来显示Django管理员中的NULL.

此外,您现在可以为Django管理员自定义此默认的' - '(破折号)显示,其中包含empty_value_display:global,特定管理类或特定字段:

全球:

# In settings.py to show '???' instead of '-' for all null django admin values
from django.contrib import admin
admin.site.empty_value_display = '???'
Run Code Online (Sandbox Code Playgroud)

对于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'
Run Code Online (Sandbox Code Playgroud)

对于单个字段:

# 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'
Run Code Online (Sandbox Code Playgroud)


mee*_*son 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 = '-'
Run Code Online (Sandbox Code Playgroud)

注意:覆盖__init__()@admin.register()装饰器无关,而是admin.site.register(Model, ModelAdmin)Model定义类之后需要调用.