Django: Nur-Lese-Feld

8

Wie kann ich zulassen, dass Felder vom Benutzer zum Zeitpunkt der Objekterstellung ("Hinzufügen" -Seite) ausgefüllt werden und dann schreibgeschützt werden, wenn auf die "Ändern" -Seite zugegriffen wird?

    
natasha 14.04.2010, 17:40
quelle

4 Antworten

9

Die einfachste gefundene Lösung bestand darin, die Funktion get_readonly_fields von ModelAdmin zu überschreiben:

%Vor%

Das Objekt wird für die Seite "Hinzufügen" und eine Instanz Ihres Modells für die Änderungsseite nicht angezeigt. Edit: Bitte beachten Sie, dass dies auf Django == 1.2

getestet wurde     
warren 03.06.2011 17:21
quelle
3

Es gibt zwei Dinge in Ihrer Frage zu behandeln.

1. Schreibgeschützte Formularfelder

Existiert nicht so wie in Django, aber Sie können es selbst implementieren, und dieser Blogbeitrag kann helfen.

2. Unterschiedliches Formular zum Hinzufügen / Ändern

Ich denke, Sie suchen nach einer Lösung im Admin-Site-Kontext (andernfalls verwenden Sie einfach zwei verschiedene Formulare in Ihren Ansichten).

Sie könnten eventuell add_view oder change_view in Ihrem ModelAdmin überschreiben und ein anderes Formular in einer der Ansichten verwenden, aber ich befürchte, dass Sie am Ende eine schreckliche Menge doppelten Codes haben werden.

>

Eine andere Lösung, die ich mir vorstellen kann, ist ein Formular, das seine Felder bei der Instanziierung ändert, wenn ein instance -Parameter übergeben wird (dh ein edit Fall). Angenommen, Sie haben eine ReadOnlyField -Klasse, dann erhalten Sie etwas wie:

%Vor%

Hier wird das Feld title im Modell Stuff auf der Änderungsseite der Verwaltungsseite schreibgeschützt, kann aber im Erstellungsformular bearbeitet werden.

Ich hoffe, das hilft.

    
Clément 14.04.2010 22:45
quelle
2

Sie können die Speichermethode dieses Modells bearbeiten, um eine solche Anforderung zu erfüllen. Sie können beispielsweise prüfen, ob das Feld bereits einen Wert enthält. Ist dies der Fall, ignorieren Sie den neuen Wert.

    
Luiz C. 14.04.2010 19:16
quelle
1

Eine Option besteht darin, die change_form-Vorlage zu überschreiben oder zu ersetzen für dieses spezifische Modell.

    
davidfischer 14.04.2010 18:02
quelle