6

データベースでフィールドが null の場合、Django は変更リストを表示するときに null の場所を保持するために "(None)" を挿入します。説明的ではありますが、変更リストに多くのフィールドがある場合、すべてが非常に忙しくなります。空白のフィールドは同じように役立ちますが、混乱ははるかに少なくなります。Django が変更リストで null フィールドを表すために使用するテキストを変更する方法はありますか? ソリューションがモデル管理者固有のものか管理者全体のものかは問題ではありません。

カスタムフィールドを定義してから空白の文字列を出力するソリューションを認識していることも追加する必要があります。それは機能しますが、 in は列をソート不可にします。これは表示前の優先事項であるため、オプションではありません。

4

2 に答える 2

23

Django 1.9 以降、この動作が変更され、説明した状況の解決策をサポートするためにいくつかのカスタム機能が追加されました。

Django 1.9 では、Django は "(None)" の代わりに "-" (ダッシュ) を使用して、Django admin で 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 に答える