0

既存のプロジェクトの新しい機能を開発する必要があります。この機能は、データベースへの保存/データベースからの削除の前に、管理者ユーザーが定義したルールに従って、モデル インスタンスのフィールド値の検証をチェックすることです。django がカスタムロジックを定義できるフォームフィールド検証メカニズムを提供していることは知っていますが、ルールが定義されているモデルとフィールドは予測できず、すべてのモデルに対応するフォームがあるわけではないため、それは正しい方法ではないようです。シナリオ全体を例で説明した方がよいと思います。

次のように 3 つのルールを定義した管理者ユーザーがあり、ルールはデータベースに保存されます。

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 オブジェクトを保存したい場合、または出版社の所在地が英国にある場合、操作を拒否し、いくつかの規則に違反しているため操作を完了できないことをユーザーに通知します。また、ユーザーはシェイクスピアの著作ではない書籍を表示する可能性がありますが、それを削除する方法はありません。

私が考えることができる 1 つのオプションは、すべての潜在的なルール制約モデルで pre_save を使用し、モデルにルールが存在するかどうかを確認してから、そこで検証を行うことですが、多くのモデルがあるため、これは既存のシステムに対する変更が多すぎるようです。

この種の作業を行う簡単な方法があるかどうか疑問に思っていますか?

4

0 に答える 0