Django field validation in Model and in Admin?

2020-07-06 01:55发布

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条回答
等我变得足够好
2楼-- · 2020-07-06 02:26

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.

查看更多
登录 后发表回答