In admin möchte ich ein Feld beim Ändern eines Objekts deaktivieren, es jedoch beim Hinzufügen eines neuen Objekts erforderlich machen.
Was ist der Django-Weg, um diesen einen zu machen?
django
django-admin
frnhr
quelle
quelle
Wenn Sie alle Felder nur in der Änderungsansicht als schreibgeschützt festlegen möchten , überschreiben Sie die get_readonly_fields des Administrators:
Und wenn Sie die Schaltflächen zum Speichern in der Änderungsansicht ausblenden möchten :
Ändern Sie die Ansicht
Ändern Sie die Berechtigungen, wenn der Benutzer versucht, Folgendes zu bearbeiten:
Diese Lösung wurde über Django 1.11 getestet
quelle
Zu Ihrer Information: Falls jemand anderes auf dieselben zwei Probleme stößt, auf die ich gestoßen bin:
Sie sollten weiterhin permanent readonly_fields im Hauptteil der Klasse deklarieren, da auf das Klassenattribut readonly_fields über die Validierung zugegriffen wird (siehe django.contrib.admin.validation: validate_base (), Zeile 213 appx).
Dies funktioniert nicht mit Inlines, da das an get_readonly_fields () übergebene Objekt das übergeordnete Objekt ist (ich habe zwei ziemlich hackige und wenig sichere Lösungen mit CSS oder JS).
quelle
Eine Variation, die auf dem vorherigen ausgezeichneten Vorschlag von Bernhard Vallant basiert und auch mögliche Anpassungen durch die Basisklasse (falls vorhanden) beibehält:
quelle
Die Situation mit Inline-Formularen ist für Django 2.2.x noch nicht behoben, aber die Lösung von John ist eigentlich ziemlich klug.
Code leicht auf meine Situation abgestimmt:
quelle
Sie können dies tun, indem Sie die Methode formfield_for_foreignkey des ModelAdmin überschreiben:
quelle
Habe ein ähnliches Problem. Ich habe es mit "add_fieldsets" und "eingeschränkten_fieldsets" im ModelAdmin gelöst.
Siehe z. B.: Http://code.djangoproject.com/svn/django/trunk/django/contrib/auth/admin.py
Dies schützt Ihr Modell jedoch nicht vor späteren Änderungen von "add_objX". Wenn Sie dies auch möchten, müssen Sie meiner Meinung nach die Funktion "Speichern" der Modellklasse durchgehen und dort nach Änderungen suchen.
Siehe: www.djangoproject.com/documentation/models/save_delete_hooks/
Griechisch, Nick
quelle