3

私が書いている Django プロジェクトの機能の 1 つは、ニュースレターの送信です。の信号をリッスンするために登録したモデルNewsletterと関数があります。ニュースレター オブジェクトが管理インターフェイス経由で保存されると、が True かどうかをチェックし、はいの場合は実際にメールを送信します。send_newsletterNewsletterpost_savesend_newslettercreated

ただし、明らかな理由から、既に送信されたニュースレターを編集することはあまり意味がありません。Newsletter保存したオブジェクトを読み取り専用にする方法はありますか?

編集:

オブジェクトのメソッドをオーバーライドしsaveてエラーを発生させたり、オブジェクトが存在する場合は何もしないことがわかっています。しかし、私はそれをする意味がわかりません。前者に関しては、そのエラーをどこでキャッチするか、オブジェクトが保存されていないという事実をユーザーに伝える方法がわかりません。後者に関しては、ユーザーに誤ったフィードバック (保存が成功したことを示す管理者インターフェース) を与えることは良いことのようには思えません。

私が本当に望んでいるのは、ユーザーが管理インターフェイスを使用してニュースレターを作成して送信し、送信済みのニュースレターを閲覧できるようにすることです。「保存」ボタンを使用せずに、編集不可の入力ボックスに送信済みニュースレターのデータを表示する管理インターフェイスを希望します。または、「保存」ボタンを非アクティブにしたいと思います。

4

4 に答える 4

9

saveモデルのメソッドで作成か更新かを確認できます。

def save(self, *args, **kwargs):
    if self.pk:
        raise StandardError('Can\'t modify bla bla bla.')
    super(Payment, self).save(*args, **kwargs)

既存のオブジェクトを保存しようとすると、上記のコードで例外が発生します。以前に永続化されていないオブジェクトには、主キーが設定されていません。

于 2009-01-21T19:29:25.670 に答える
1

推奨読書:DjangoBookの第17章にある管理者の禅。

要約:管理者はあなたがやろうとしていることのために設計されていません:(

ただし、この本の1.0バージョンはDjango 0.96のみをカバーしており、それ以来、良いことが起こっています。

Django 1.0では、管理サイトはよりカスタマイズ可能です。私は自分で管理者をカスタマイズしていないので、ドキュメントに基づいて推測する必要がありますが、モデルフォームをオーバーライドするのが最善の策だと思います。

于 2009-02-10T08:57:23.800 に答える
0

amdin.pyでreadonlyadminを使用します。読み取り専用にしたいすべてのフィールドをリストします。オブジェクトを作成した後、それらを編集することはできません

リンクを使用する

http://www.djangosnippets.org/snippets/937/

ファイルをコピーしてから、ur admin.py にインポートして使用します

于 2010-03-19T14:00:41.443 に答える