我正在创建一个Django应用程序,该应用程序同时使用Django Rest Framework和普通的django视图作为用户的入口点。
我想对我的模型的独立字段和整个对象进行验证。例如:
- 字段:输入的车牌号是否符合基于regex函数的正确格式,与其他字段无关。 - 对象:输入的邮政编码是否对给定国家有效,与模型中的邮政编码和国家有关。
对于DRF-API,我使用ModelSerializers自动调用我在模型中放置的所有验证器,例如:
我想对我的模型的独立字段和整个对象进行验证。例如:
- 字段:输入的车牌号是否符合基于regex函数的正确格式,与其他字段无关。 - 对象:输入的邮政编码是否对给定国家有效,与模型中的邮政编码和国家有关。
对于DRF-API,我使用ModelSerializers自动调用我在模型中放置的所有验证器,例如:
class MyModel(models.Model):
licence_plate = CharField(max_length=20, validators=[LicencePlateValidator])
由于验证器已经在模型中设置,因此使用 ModelSerializer 的 API POSTS(以及在 Django 后端管理中创建的对象)都会被验证。
但是,当我想要引入对象级别的验证时,我需要在序列化程序的 validate() 方法中进行操作,这意味着对象只在 API 中得到验证。
我还必须重写模型的保存方法,以验证在 Django 管理页面中创建的对象。
问题:对我来说,这似乎有些凌乱,是否有一个单一的点可以放置对象级别的验证器,以便在 API 和管理页面中运行它们,就像我使用字段级别验证器一样(我只需将 它们 放入模型声明中即可处理所有内容)
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use users.set() instead.
是否有任何解决方法? - Philipp Mildenberger