2

私はこれを2日間探し回っていますが、現実的な解決策を見つけることができませんでした.

フォーム:

class SMSSettingsForm(forms.ModelForm):
    smsQuota = forms.IntegerField(label=_("Account Quota"), max_value=432000, min_value=1, required=True, help_text=_('(mins)'), error_messages={'required': _('This field cannot be empty')})
    smsTimeout = forms.IntegerField(label=_("Timeout"), max_value=9999999, min_value=1,required=False, help_text=_("(mins)"))
    class Meta:
        model = Settings
        fields = ("smsQuota", "smsTimeout")

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

    def save(self):
        settings = SettingsManager.get()
        settings.smsQuota = self.cleaned_data['smsQuota']
        settings.smsTimeout = self.cleaned_data['smsTimeout']

        # Following lines are extra fields, rendered by JS in HTML
        settings.ck = self.cleaned_data['ck']
        settings.ck_per = self.cleand_data['ck_per']

        settings.save()

ビュー:

form_with_extra_elem = request.POST.copy()
form_with_extra_elem['ck'] = request.POST.get("ck")
form_with_extra_elem['ck_per'] = request.POST.get("ck_per")
# The two lines above didn't work, so I tried the following, but didn't work again
#form_with_extra_elem.update({'ck': request.POST.get("ck")})
#form_with_extra_elem.update({'ckper': request.POST.get("ck_per")})
form = SMSSettingsForm(form_with_extra_elem)

これを解決する方法はありますか?私が思うに、新しい要素は を通過しないvalidationので、使用できません。しかし、どうやってそうさせるのですか?実際、検証は必要ありませんcleaned_data。フォーム パラメータにアクセスする以外の方法はありますか?

4

1 に答える 1

1

JS だけでフィールドを追加したい理由がわかりません。それらを に表示する場合cleaned_dataは、フォームの一部である必要があります。他のフィールドと同様に指定するだけで、ModelForm で追加のフィールドを宣言できます。

class SMSSettingsForm(forms.ModelForm):
    smsQuota = forms.IntegerField(...)
    smsTimeout = forms.IntegerField(...)
    ck_per = forms.IntegerField()
    ck = forms.IntegerField()
于 2013-03-16T12:42:15.643 に答える