2017-10-26 4 views
0

フィールドが隠されていますが、modelformで指定されていると、検証に合格しません。以下のフォームは、コンストラクタのポストコードデータを渡しても、ポストコードフィールドの検証に合格しません。それを保存できるように、検証に正しく合格するためにデータをどのようにアタッチするのですか?Django隠しフィールドを持つモデルフォームは、検証をパスしません

例えば

class SupplyAddressForm(forms.ModelForm): 
    full_address = forms.ChoiceField() 

    def __init__(self, postcode, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     raw_addresses_data = get_full_address(postcode) 
     addresses = raw_addresses_data['data']['addresses'] 
     ........... 
     self.fields['postcode'].initial = postcode 



    def save(self, commit=False): 
     address = super().save(commit=False) 
     cd = self.cleaned_data 
     full_address = cd['full_address'] 
     full_address = json.loads(full_address) 
     ...... 
     return address 

    class Meta: 
     model = Address 
     fields = [ 
      'supply_months', 
      'supply_years', 
      'postcode', 
      'residential_status', 
     ] 

     widgets = { 
      'postcode': forms.HiddenInput 
     } 
+0

提供されたデータのギャップを埋めるために初期データは使用されません。 –

+0

レンダリングされたフォームでは、 'postcode'フィールドに値がありますか? –

答えて

0

初期には、あなたのpuposesに適していない理由を理解するために、このdocumentaionをお読みください。

代わりに、 'is_valid'メソッドをオーバーライドしてください。 'is_valid'では、フォームが送信された後に非表示フィールドの値を変更します。私はこの解決策を得ましたhere

+0

ありがとう私は愚かに問題がどこにあった私の清潔な方法をここに含めなかった。 – Yunti

関連する問題