Django Form field initial value on failed validation

前端 未结 3 2091
花落未央
花落未央 2021-02-09 11:51

how do I set the value of a field element after a form has been submitted but has failed validation? e.g.

if form.is_valid():
    form.save()
else:
    form.dat         


        
3条回答
  •  [愿得一人]
    2021-02-09 12:25

    You can put it in the form class like this:

    class MyForm(forms.Form):
    
        MY_VALUE = 'SOMETHING'
        myfield = forms.CharField(
            initial=MY_VALUE,
            widget=forms.TextInput(attrs={'disabled': 'disabled'})
    
        def __init__(self, *args, **kwargs):
    
            # If the form has been submitted, populate the disabled field
            if 'data' in kwargs:
                data = kwargs['data'].copy()
                self.prefix = kwargs.get('prefix')
                data[self.add_prefix('myfield')] = MY_VALUE
                kwargs['data'] = data
    
            super(MyForm, self).__init__(*args, **kwargs) 
    

    The way it works, is it tests to see if any data has been passed in to the form constructor. If it has, it copies it (the uncopied data is immutable) and then puts the initial value in before continuing to instantiate the form.

提交回复
热议问题