私はDjangoモデルを持っています。
class Settings(models.Model):
field_1 = models.BooleanField()
field_2 = models.CharField(max_length = 255)
そしてフォーム
class SiteSettingsForm(forms.ModelForm):
class Meta:
model = SiteSettings
HTML フォームがあり、ブール値のチェックボックスがチェックされてfield_1
いない場合、2 番目のフィールド ( field_2
) が無効になります。
問題は、フォームを保存しようとすると、field_2
が空であるため、エラーがあると表示されることです。
field_2
が無効になっておらず、空でない場合はエラーを取得しますが、無効field_2
になっている場合は、フォームがデータベースから値を取得するようにします。
私はこれを試しました:
class SettingsForm(forms.ModelForm):
class Meta:
model = Settings
def __init__(self, *args, **kwargs):
super(SettingsForm, self).__init__(*args, **kwargs)
def clean(self):
field_1 = self.data.get('field_1','')
if not field_1: # field_2 is disabled
self.data['field_2'] = self.instance.field_2 # so get from db
super(SettingsForm, self).clean()
return self.cleaned_data
問題は、エラーが発生することです。
この QueryDict インスタンスは不変です