我需要为现有项目开发新功能。该功能是在保存/删除数据库之前根据一些管理员用户定义的规则检查模型实例的字段值的验证。我知道 django 提供了一个表单字段验证机制,我可以在其中定义自定义逻辑,但这似乎不是正确的方法,因为定义了规则的模型和字段是不可预测的,并且并非所有模型都有对应的表单。我想我最好用一个例子来描述整个场景。
有一个管理员用户定义了如下三个规则,这些规则存储在数据库中。
Rule 1:
model: Book
field: author
operator: is
values: Shakespeare
Rule 2:
model: Book
field: publish_date
operator: greater than
values: 2000-1-1
Rule 3:
model: Book
field: publisher.location (Book has a ForeignKey relationship to Publisher)
operator: not in
values: U.K.
因此,当登录用户想要保存非莎士比亚作者或出版商所在地在英国的 Book 对象时,我们将拒绝该操作,并告知用户他因违反某些规则而无法完成该操作。此外,用户可能会查看一些不是莎士比亚创作的书籍,但他无法删除它。
我能想到的一种选择是在所有潜在的规则约束模型上使用 pre_save 并检查模型上是否存在规则,然后在那里进行验证,但这似乎对现有系统的改变太大,因为我们有很多模型。
我想知道是否有任何简单的方法来做这种工作?