title: Django validation - avoiding multiple full_cleans()
body: <p>I am new to Django, and after reading a bunch of docs/guides and googling stuff, I am still a little confused about the best practice way to do validation.</p>
  
  <p>It seems like the best place to do validation is on the Model level, to ensure that it is always applied, regardless of where the data comes from (e.g. Django front-end, some JS server, API, etc). If I override the Model save() method in my base model to call full_clean(), that seems like the best way to guarantee that the saved data is always good.</p>
  
  <p>However, I am running into various issues with this in my project. The obvious one is that Django's ModelForms call Model full_clean() already, so I end up calling it twice in this case. On top of that, there are other complications, for example:</p>
  
  <ul>
  <li>if there is a Model level method that saves a compound Model that has another Model inside it (e.g. Address inside some Account), I can't just save Address, because Account might fail validation afterwards. So I really need to validate both Models first, and only then save them (keep it transactional). But then, I need to call full_clean() to validate, and it's called again during save(), making it 3 times it's called now. This seems rather wasteful, especially since some validation methods hit the db (e.g. validate_unique).</li>
  </ul>
  
  <p>One thing I was thinking about is to make full_clean() smarter, i.e. add some functionality to check if the Model has been changed since last time it was cleaned, and only run it again then, but this seems rather complicated in the sense that it might involve a lot of work for each Model.</p>
  
  <p>Any suggestions on how to better handle this? Thanks in advance.</p>