Ich bin nur ein paar Tage Neuling in Django. Jetzt muss ich sowohl den Wert als auch die Repräsentation in einem Feld ändern, wenn sich der Wert eines anderen Feldes in benutzerdefinierter Form ändert. Und an diesem Punkt ändert sich MyModel eingeschränkt.Django Formular Customizing: ändern Feld auf anderen Feld ändern
myapp/models.py:
class MyModel(models.Model):
somefield = models.IntegerField(default=0)
myapp/forms.py
class MyModelForm(models.Model):
someformfield = models.BooleanField(required=False)
// Here it should be smth as following:
// def clean(..), or def save(..), or def __init__(..)
if MyModelForm.is_valid():
# This if-else construction further should 'raise' on every change of 'someformfield'-checkbox:
if someformfield == True:
somefield = 0
self.fields['somefield'].widget = forms.HiddenInput()
else:
somefield = data['somefield'] # Just to use User Input
self.fields['somefield'].widget = forms.ShownInput() # What's wrong, but I just need to abort HiddenInput somehow - so, how shoulda do it?
versuchte ich definieren clean() wie folgt, aber es tat nichts, auch nicht Formen aufwarf. Validation:
def clean(MyModelForm, self):
cleaned_data = super(MyModelForm, self).clean()
if self.cleaned_data['someformfield']:
if self.cleaned_data['somefield'] != 0:
# This didn't work
raise forms.ValidationError(
"Error!"
)
# And following also didn't work
self.cleaned_data['somefield'] = 0
self.fields['somefield'].widget = forms.HiddenInput()
Und das auch nicht funktioniert hat:
def clean(MyModelForm, self):
cleaned_data = super(MyModelForm, self).clean()
somefield = cleaned_data.get("somefield")
someformfield = cleaned_data.get("someformfield")
if someformfield:
# Also not working
if somefield != 0:
raise forms.ValidationError(
"Error!"
)
# Also not working
somefield = 0
self.fields['somefield'].widget = forms.HiddenInput()
Wahrscheinlich sollte ich eine andere Methode verwenden - speichern (..) oder init (..), oder was auch immer, bekam aber völlig in docs verwirrt und keine Ahnung haben, was ist der Zweck jedes dieser Methoden. Welche Methode sollte ich hier verwenden und wie?
Ihre saubere Methode sollte 'def clean (self) sein:' –
Was ist 'myform'? –
Nur falsch geschrieben, sorry. Behoben. – Dilemma