Wie kann ich in einem Django-Formular ein Feld schreibgeschützt (oder deaktiviert) machen?
Wenn das Formular zum Erstellen eines neuen Eintrags verwendet wird, sollten alle Felder aktiviert sein - wenn sich der Datensatz jedoch im Aktualisierungsmodus befindet, müssen einige Felder schreibgeschützt sein.
Wenn Sie zum Beispiel eine neue Item
Modell müssen alle Felder bearbeitbar sein, aber gibt es eine Möglichkeit, während der Aktualisierung des Datensatzes die sku
Feld, so dass es zwar sichtbar ist, aber nicht bearbeitet werden kann?
class Item(models.Model):
sku = models.CharField(max_length=50)
description = models.CharField(max_length=200)
added_by = models.ForeignKey(User)
class ItemForm(ModelForm):
class Meta:
model = Item
exclude = ('added_by')
def new_item_view(request):
if request.method == 'POST':
form = ItemForm(request.POST)
# Validate and save
else:
form = ItemForm()
# Render the view
Kann Klasse ItemForm
wiederverwendet werden? Welche Änderungen wären erforderlich in der ItemForm
o Item
Modellklasse? Müsste ich eine weitere Klasse schreiben, " ItemUpdateForm
", um den Artikel zu aktualisieren?
def update_item_view(request):
if request.method == 'POST':
form = ItemUpdateForm(request.POST)
# Validate and save
else:
form = ItemUpdateForm()
1 Stimmen
Siehe auch SO Frage: Warum sind schreibgeschützte Formularfelder in Django eine schlechte Idee? @ stackoverflow.com/questions/2902024 Die akzeptierte Antwort (von Daniel Naab) kümmert sich um bösartige POST-Hacks.
0 Stimmen
forms.fields.Field.disabled