在 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'
当数据库中的字段为空时,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'