Ich habe eine Formular-Basisklasse, die überprüft, ob sich die Instanz, die das Formular aktualisiert, geändert hat, und speichert sie nicht, wenn sie sich nicht geändert hat.Django-Musterformulare - deaktivierte Felder in "changed_data"
das ist in meiner benutzerdefinierten Modellform, außer Kraft setzen ich sparen:
class MyModelForm(models.ModelForm):
# .. more code here..
def save(self, commit=True):
if self.has_changed():
# Won't do anything if the instance did not changed
return self.instance
return super(MyModelForm, self).save(commit)
Viele meiner Formulare verwenden diese Basisklasse. Nun hat eines meiner Formulare ein paar Felder, die ich auf disabled=True
(Django 1.9 +) eingestellt habe. So in einen meiner Formen:
def __init__(self, *args, **kwargs):
## ..code
self.fields['address'].disabled = True
Nach vielen Debugging, warum die form.has_changed()
ist True (also die Instanz ohne Grund gespeichert wird), auch wenn ich das Formular speichern, ohne die Instanz zu ändern. Ich habe herausgefunden, dass Django deaktivierte Felder in changed_data
enthält - was keinen Sinn macht, da deaktivierte Felder vom Benutzer sowieso nicht geändert werden sollten.
Fehle ich etwas oder es ist ein Fehler, oder vielleicht, wie es funktionieren sollte? Wie kann ich dies ohne zu viele Änderungen beheben, wie die Formular-Basisklasse in meinem Code viel verwendet wird.
Ich habe auch diese Frage. Konntest du eine Lösung finden? –
Nicht genau, ich habe es manuell gelöst. d. h. deaktivierte Felder aus changed_data entfernt – user3599803