10

models.py

class Menu(models.Model):

    ...
    has_submenu=models.BooleanField(default=1)
    page=models.ForeignKey(Page,null=True)

has_submenu チェックボックスが false の場合にのみ、django 管理者がページ属性を表示するようにします (したがって、django-admin は私のために JavaScript を作成する必要があります:))

多分私はrender_change_formメソッドを拡張する必要があります

何かアドバイス?

4

4 に答える 4

3

get_form次のように、ModelAdmin でメソッドをオーバーライドするのはどうですか。

class MenuModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        self.exclude = []
        if obj and obj.has_submenu:
            self.exclude.append('page')
        return super(MenuModelAdmin, self).get_form(request, obj, **kwargs)

また、 get_form docsも参照してください。

于 2013-04-12T20:23:43.400 に答える
1

Django 管理テンプレートを拡張できます。

次の構造に従ってください。

プロジェクト全体で:

templates/admin/change_form.html

アプリケーション全体

templates/admin/<my_app>/change_form.html

モデル全体

templates/admin/<my_app>/<my_model>/change_form.html

あなたの場合、メニューモデルを拡張するだけでよいようです。私は次のことをします:

  1. django フォルダからchange_form.htmlチームプレートを取得します
  2. オブジェクトループ内でページフィールドを探します
  3. has_submenuの条件チェックを実行して、ページ属性を表示するかどうかを決定します
于 2013-04-12T20:37:25.473 に答える