Important note: direct model instance manager.create()/save() doesn't validate (run instance.full_clean()).
Only form validate instance (calls instance.full_clean()).
ModelForm validation process (Form + Model instance):
form.is_valid()form.errors()form.full_clean()- populate errors and cleanded_dataform._clean_fields()- (form.fields == model.fields)field.clean()field.to_python()field.validate()field.run_validators()
form._clean_form()form.clean()
form._post_clean()- populate instance with cleaned_datainstance.full_clean()- validate instance (model + cleaned_data)instance.clean_fields()field.clean()field.validate()field.run_validators()
instance.clean()
form.validate_unique()instance.validate_unique()
form.save()form.instance.save()
Model object validation:
model.full_clean(validate_unique=True)model.clean_fields()model.clean()- passmodel.validate_unique()