2015-01-27 14 views
7

Wenn ein Feld in der Datenbank null ist, fügt Django "(None)" ein, um den Platz des Nullwerts beim Anzeigen einer Änderungsliste zu halten. Während beschreibend, wenn es viele Felder auf einer Änderungsliste gibt, macht es alles sehr beschäftigt, um zu betrachten, wo ein leeres Feld genauso hilfreich wäre, aber viel weniger überladen. Gibt es eine Möglichkeit, den Text zu ändern, den Django für die Darstellung von Nullfeldern in der Änderungsliste verwendet? Es spielt keine Rolle, ob die Lösung modeladmin-spezifisch oder admin-weit ist.Wie zeige ich in der Django Admin-Änderungsliste anstelle des Standardwerts "(None)" ein Leerzeichen an?

Sollte auch hinzufügen, dass ich die Lösung kennen, wo Sie benutzerdefinierte Felder definieren und dann eine leere Zeichenfolge ausgeben. Das funktioniert, aber das macht die Spalte unportierbar, und das ist eine Priorität vor der Anzeige, also ist es keine Option.

+0

Wenn Sie nur mit Zeichenfolgenfeldern beschäftigt sind, können Sie es immer leer machen = True, null = False, was Ihnen eine leere Zeichenfolge geben würde (was Sie wollen). –

+0

Leider sind Fremdschlüssel beteiligt. Ich hoffe auf eine allgemeinere Lösung. – meesterguyperson

+0

mögliche Duplikate von [Wie ändert man EMPTY \ _CHANGELIST \ _VALUE in Django Admin?] (Http://stackoverflow.com/questions/18324030/how-to-change-empty-changelist-value-in-django-admin) –

Antwort

8

Sie können die einzelnen Modeladmin Verhalten mit dieser Problemumgehung außer Kraft setzen:

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 = '-' 

Hinweis: die __init__() Aufschalten mit dem @admin.register() Dekorateur incompatable ist, stattdessen müssen Sie admin.site.register(Model, ModelAdmin) nach der Model Klasse definiert ist nennen.

+0

Clever. Gute Übergangslösung. :) –

12

Beginnend mit Django 1.9 hat sich dieses Verhalten geändert und einige benutzerdefinierte Funktionen wurden hinzugefügt, um eine Lösung für die von Ihnen beschriebene Situation zu unterstützen.

Mit Django 1.9 verwendet Django jetzt ein '-' (Bindestrich) anstelle von "(None)", um NULLs im Django-Admin anzuzeigen.

Zusätzlich Sie jetzt diesen Standard anpassen ‚-‘ (Bindestrich) Anzeige für die Django Admin mit den empty_value_display: global, für eine bestimmte Admin-Klasse oder ein bestimmtes Feld:

Weltweit:

# In settings.py to show '???' instead of '-' for all null django admin values 
from django.contrib import admin 
admin.site.empty_value_display = '???' 

Für alle Felder in einer Admin-Klasse 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' 

Für ein einzelnes Feld:

# 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' 
+0

Gibt es eine Möglichkeit, dieses Verhalten in Django 1.8 zu bekommen? –