1

私は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 インスタンスは不変です

4

1 に答える 1

2

フォームを変更します。

class SettingsForm(forms.ModelForm):
    class Meta:
        model = Settings

    def __init__(self, *args, **kwargs):
        super(SettingsForm, self).__init__(*args, **kwargs)

    def clean(self):
        cleaned_data = super(SettingsForm, self).clean()
        field_1 = cleaned_data.get('field_1','')
        if not field_1:   # field_2 is disabled 
            cleaned_data['field_2'] = self.instance.field_2 # so get from db
        self.cleaned_data = cleaned_data
        return self.cleaned_data
于 2012-05-13T14:32:04.057 に答える