1

このシナリオでは、2つ以上のモデルがあります。

class Store(models.Model):
    name = models.CharField(max_length = 100)
    homepage = models.URLField(verify_exists = False)
    ....

class Product(models.Model):
    display = models.BooleanField(default = True)
    created = models.DateTimeField(auto_now_add = True)
    changed = models.DateTimeField(auto_now_add = True, auto_now = True)
    ....

これらはそれぞれ異なるコメントモデル/フォームを必要とします。例えば:

  • 製品コメント製品の評価、長所、短所などの追加情報が欲しいのですが。
  • ただし、ストアについては、カスタマーサポートの料金、コミュニケーション/応答の料金、送料が妥当な場合のブール値などのフィールドが必要です。

これらのモデルは両方とも、contribコメントモデルをサブクラス化するため、既存のadminタグとcommentsテンプレートタグと互換性があります。

ただし、Djangoの組み込みのコメント設定はかなり厳格であり、get_model()メソッドとget_form()メソッドを使用して1つのモデル/フォームをカスタマイズすることしかできません。

どちらの場合も別の方法を使用して正しく機能していますが、コードの重複が多く、3番目または4番目のタイプのコメントサブクラスを追加する場合は実用的ではありません。

誰かがこれを行うためのより良い方法を知っていますか?StackOverflowを検索してみましたが、このユースケースに似た結果は得られないようです。

4

1 に答える 1

1

最終的に、現在のDjangocontribコメントモジュールの上にある追加のモデルを実装しました。

コメントシステムはより柔軟になり、次のようなさまざまな新機能が可能になりました。

  • 何よりもまず、さまざまなコメントモデルを特定のターゲットモデルに関連付けることができます
  • contribコメントモジュールのようにハッキングすることなく、コメントモデルをORMのターゲットモデルに直接リンクします
  • フォームでのカスタム検証を許可し、フィールドが無効な場合は500を発生させません
  • ユーザーを空白のページにリダイレクトすることなく、現在のページにコメントプレビューを表示する
  • シグナルを使用せずに、コメント前後のイベントを簡単に実装できます
  • contribコメントシステムに接続し、既存のデータベース/プラグイン/テンプレートタグ/テンプレートフィルターと互換性を持たせます
  • コメント「comment_was_posted」シグナルのサポートを維持します
  • テーマを設定するのは簡単です。モデル名はフォームクラス名に含まれているため、各フォームのスタイルを指定できます。
  • テンプレートを簡単に上書きできます(以下を参照)

このモジュールは、開発やテストの支援に興味がある場合はgithubで入手できます。

contribコメントシステムと互換性があるため、既存のタグの多くは引き続き機能し、既存のテンプレートをすべてやり直す必要はありません。詳細については、ドキュメントを参照してください。

于 2012-04-07T09:42:44.837 に答える