Django:在保存/删除之前,根据用户定义的规则验证模型对象字段值

时间:2013-08-19 13:00:21

标签: django

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

我想知道是否有任何简单的方法可以做这种工作?

0 个答案:

没有答案