当数据库中的字段为空时,Django 在显示更改列表时插入“(None)”来保存空的位置。虽然是描述性的,但当变更列表上有很多字段时,它会让所有内容都变得非常忙碌,而空白字段同样有用,但不会那么混乱。那么有什么方法可以改变 Django 用来表示更改列表中的空字段的文本吗?解决方案是特定于模型管理员的还是管理员范围的都没关系。
还应该补充一点,我知道您定义自定义字段然后输出空白字符串的解决方案。这行得通,但是 in 使列无法排序,这是显示之前的优先级,所以它不是一个选项。
当数据库中的字段为空时,Django 在显示更改列表时插入“(None)”来保存空的位置。虽然是描述性的,但当变更列表上有很多字段时,它会让所有内容都变得非常忙碌,而空白字段同样有用,但不会那么混乱。那么有什么方法可以改变 Django 用来表示更改列表中的空字段的文本吗?解决方案是特定于模型管理员的还是管理员范围的都没关系。
还应该补充一点,我知道您定义自定义字段然后输出空白字符串的解决方案。这行得通,但是 in 使列无法排序,这是显示之前的优先级,所以它不是一个选项。
从 Django 1.9 开始,这种行为发生了变化,并添加了一些自定义功能来支持您描述的情况的解决方案。
在 Django 1.9 中,Django 现在使用“-”(破折号)而不是“(无)”来在 Django 管理中显示 NULL。
此外,您现在可以使用empty_value_display
: 全局自定义 Django 管理员的默认“-”(破折号)显示,用于特定管理类或特定字段:
在全球范围内:
# 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'
您可以使用此解决方法覆盖单个 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