title: django: form save fails due to validation - but shouldn't is_valid() catch this?
body: <p>I am taking over someone else's code, I am not a django expert but have had some fair share.</p>
  
  <p>We have a page with two forms, FirstForm and SecondForm.</p>
  
  <p>This is the code saving the form:</p>
  
  <pre><code>if first_form.is_valid() and second_form.is_valid():
      new_instance = first_form.save()
      second_instance = second_form.save(commit=False)
      second_instance.save()
  </code></pre>
  
  <p>Now, what happens is that the last line, second_instance.save(), fails because one of the elements breaks the model requirements:</p>
  
  <pre><code>ValueError: Field value longer than max allowed: 90 &gt; 50
  </code></pre>
  
  <p>But what I fail to understand: shouldn't the <code>second_form.is_valid()</code> call actually already catch this situation and prevent <code>save()</code> to fail??? 
  Does the SecondForm need validation code as well?</p>
  
  <p>Here's part of the definition of the SecondModel, with the property affected:</p>
  
  <pre><code>class SecondModel(models.Model):
   address_line_1 = EncryptedCharField(null=True,
                                       blank=True,
                                       max_length=100,
                                       cipher=settings.ENCRYPTION_CIPHER,
                                       block_type=settings.ENCRYPTION_BLOCK_TYPE)
  </code></pre>
  
  <p>Here's the form:</p>
  
  <pre><code>class SecondForm(forms.ModelForm):
  
      def __init__(self, *args, **kwargs):
          super(SecondForm, self).__init__(*args, **kwargs)
          for field_name in self.fields:
              field = self.fields.get(field_name)
              if field:
                  if type(field.widget) in (forms.TextInput,):
                      field.widget = forms.TextInput(attrs={'placeholder': field.label})
                  if type(field.widget) in (forms.Textarea,):
                      field.widget = forms.Textarea(attrs={'placeholder': field.label})
                  if type(field.widget) in (forms.PasswordInput,):
                      field.widget = forms.PasswordInput(attrs={'placeholder': field.label})
  
      class Meta:
          model = SecondModel
          exclude = ('user', 'lat', 'lon')
  </code></pre>