6

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

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

4

2 回答 2

23

从 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'
于 2016-01-25T21:47:08.963 回答
9

您可以使用此解决方法覆盖单个 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

于 2015-01-27T17:00:10.300 回答