私はDjangoの初心者初心者です。今私は、カスタムフォームの他のフィールドの値が変更されているときに、1つのフィールドで値と表現の両方を変更する必要があります。そして、この時点でMyModelはが制限されています。です。Djangoフォームのカスタマイズ:他のフィールドのフィールドを変更する
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?
は、私は()のような、次のクリーン定義しようとしたが、それは何もしませんでした。 ValidationErrorを:
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()
そして、これは同様に動作しませんでした:
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()
おそらく、私はいくつかの他の方法を使用する必要があります - (..)保存またはのinit(..)、または何が、ドキュメントで完全に混乱しましたとは考えている、これらのそれぞれの目的は何でありますメソッド。だから私はここでどの方法を使うべきですか?
クリーンメソッドは 'def clean(self):' –
である必要があります。 'myform'とは何ですか? –
ちょうどスペルミス、申し訳ありません。修正しました。 – Dilemma