6

1 対多の関係で接続されたいくつかのモデルを持つ Django アプリケーションを想定します。

class Blog(models.Model):
    ...

class Post(models.Model):
    blog = models.ForeignKey(Blog)
    ...

class Comment(models.Model):
    post = models.ForeignKey(Post)
    ...

概念的には、それらは階層、つまりツリーのような構造を形成します。Django管理者にそれを反映してもらいたいです。特に:

  1. 投稿の変更リストでは、すべての投稿に対応するコメントの変更リストへのリンクが必要です。
  2. 同様に、投稿の編集ページは、右上のボタン領域からコメントの変更リストにリンクする必要があります。
  3. 関連するコメントのリストを開くと、パンくずリスト (投稿 › 「Hello world」 › コメントのようなもの) と、理想的には URL ( post/123/comment/) の関係を反映する必要があります。

もちろん、これは階層の他のレベルにも適用されます。

list_display1 番は、カスタムエントリと?post__id=コメント変更リストへのクエリを使用することで非常に簡単です。しかし、これは単なるハックにすぎません。通常、Django は私の 3 つのモデルが独立したトップレベルのエンティティであると想定しています。

これを達成する簡単な方法はありますか?AdminModel一連のテンプレートとメソッドをオーバーライドできると思いますが、一般的な状況のように思われるものに対するより良い解決策があるでしょうか?

4

2 に答える 2

1

これはどのように一般的な状況ですか?モデルが事実上無制限の数の外部キー関係を持つことができるという事実を考慮してください。逆もまた同様です。管理者は、カスタマイズせずにユーザーが必要とする方法でこのデータを表現する方法をどのように「知る」ことができるでしょうか?

ウェブフレームワークではなく、コンテンツ管理システムでの作業に慣れていることをお勧めします (しゃれは意図されていません)。Django は cms ではなく、必要に応じてその上に構築できる Web フレームワークであることに注意してください。一言で言えば、「Django はかなり無知であり、コンテキストの要件を認識していません」。

管理者はすぐに使える非常に優れた機能ですが、カスタマイズが難しい場合があります。それがコアの一部であるべきかどうかについて、かなりの議論がありました。カスタマイズがハッキリしがちな場合は、おそらく独自の「admin」を作成することをお勧めします。それほど難しくありません。

于 2013-02-26T16:53:47.350 に答える
0

Django Admin Inline Modelsを見ているだけではありませんか?

自動化された管理者が関係を取得する方法はありません。なぜなら、RDBS には任意の数の外部キー / 1 対 1 / 多対多の関係が存在する可能性があり、Django にはカスタマイズされた階層動作が組み込まれていないためです。

必要に応じて、管理テンプレートをカスタマイズしてブレッドクラムを編集できます。

リレーションについては、階層モデルのインスタンスを作成できるdjango MPTTにも興味があるかもしれません。この質問も参照してください:その点で、階層モデル(django)の効率的なデータベースクエリの作成

于 2013-02-26T17:38:33.497 に答える