问题
I want to define my own validation routine for a particular field of a Django model. I want the error message to be displayed in the admin form but I also want the same validation to take place if the entity is saved by own python code. Is there a way to do this without breaking the DRY principle?
回答1:
If you want to validate an individual field, you can write a validator and add it to your model field.
The validator will be run for the field whenever the model's full_clean method is called. It will be run whenever a model form is validated (including in the Django admin), but it will not automatically run when the model instance is saved - you must call full_clean
manually in python code.
m = MyModel(x=20)
m.full_clean() # may raise ValidationError
m.save()
If you wanted to force the validator to run whenever the model is saved, then you could override the save method and call full_clean
there. Note that this would cause the validation to run twice when using model forms and the django admin.
来源:https://stackoverflow.com/questions/12608639/django-field-validation-in-model-and-in-admin