我需要为现有项目开发一个新功能。该功能是在保存/删除数据库/从数据库删除之前,根据一些管理员用户定义的规则检查模型实例的字段值的验证。我知道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并检查模型上是否存在规则然后在那里进行验证,但这似乎对现有系统进行了太多改动,因为我们有很多模特。
我想知道是否有任何简单的方法可以做这种工作?