3

次のコードを実装することで、「保存して別のものを追加」ボタンと「保存して編集を続行」ボタンを削除できました。

# At the start of my admin.py file I have:
from django.contrib.admin.templatetags.admin_modify import *
from django.contrib.admin.templatetags.admin_modify import submit_row as original_submit_row

@register.inclusion_tag('admin/submit_line.html', takes_context=True)
def submit_row(context):
    ctx = original_submit_row(context)
    ctx.update({
        'show_save_and_add_another': context.get('show_save_and_add_another', ctx['show_save_and_add_another']),
        'show_save_and_continue': context.get('show_save_and_continue', ctx['show_save_and_continue'])
        })
    return ctx

class MyModelAdmin(GuardedModelAdmin):
# Then inside MyModelAdmin I have this:
    def change_view(self, request, object_id, form_url='', extra_context=None):
        extra_context = extra_context or {}
        extra_context['show_save_and_add_another'] = False
        extra_context['show_save_and_continue'] = False
        return super(MyModelAdmin, self).change_view(request, object_id,
            form_url, extra_context=extra_context)

これは、change_view を使用しているときにはうまく機能しますが、モデルの新しいインスタンスを追加すると、ボタンが再び表示されます。私は次のことを試しました:

    def add_view(self, request, form_url='', extra_context=None):
        extra_context = extra_context or {}
        extra_context['show_save_and_add_another'] = False
        extra_context['show_save_and_continue'] = False
        return super(MyModelAdmin, self).add_view(self, request, form_url='', extra_context=extra_context)

しかし、それは私に奇妙な MissingAtrribute エラーを与えます - ここにトレースバックがあります:

Traceback:
File "/home/username/.virtualenvs/MyProject/lib/python3.3/site-packages/django/core/handlers/base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/username/.virtualenvs/MyProject/lib/python3.3/site-packages/django/contrib/admin/options.py" in wrapper
  432.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/home/username/.virtualenvs/MyProject/lib/python3.3/site-packages/django/utils/decorators.py" in _wrapped_view
  99.                     response = view_func(request, *args, **kwargs)
File "/home/username/.virtualenvs/MyProject/lib/python3.3/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  52.         response = view_func(request, *args, **kwargs)
File "/home/username/.virtualenvs/MyProject/lib/python3.3/site-packages/django/contrib/admin/sites.py" in inner
  198.             return view(request, *args, **kwargs)
File "/home/username/Development/MyProject/webapp/MyModel/admin.py" in add_view
  153.         return super(MyModelAdmin, self).add_view(self, request, form_url='', extra_context=extra_context)
File "/home/username/.virtualenvs/MyProject/lib/python3.3/site-packages/django/utils/decorators.py" in _wrapper
  29.             return bound_func(*args, **kwargs)
File "/home/username/.virtualenvs/MyProject/lib/python3.3/site-packages/django/utils/decorators.py" in _wrapped_view
  95.                     result = middleware.process_view(request, view_func, args, kwargs)
File "/home/username/.virtualenvs/MyProject/lib/python3.3/site-packages/django/middleware/csrf.py" in process_view
  111.                 request.COOKIES[settings.CSRF_COOKIE_NAME])

Exception Type: AttributeError at /admin/MyModel/ModelInstance/add/
Exception Value: 'MyModelAdmin' object has no attribute 'COOKIES'

私はdjango-guardianを使用していますが、これがどういうわけか私の問題を引き起こしているのでしょうか? 新しいモデル インスタンスを追加するときに、テンプレートの submit_line 部分からこれらの迷惑なボタンを取り除く方法を知っている人はいますか?

4

2 に答える 2

5

これらのボタンを表面的な目的で単純に非表示にする場合は、CSS を使用することもできます。これは、CSS を検査することで元に戻すことができるため、最善の方法ではない可能性があります。これは確かにシンプルであり、特定のモデルでのみ非表示にするのに十分な粒度です。管理者。

admin.py:

class MyModelAdmin(admin.ModelAdmin)

    ....

    class Media:
        #js = ('' )  # Can include js if needed
        css = {'all': ('my_admin/css/my_model.css', )}  

my_model.css は、上記のパスの静的ファイル フォルダーにあります。

my_model.css:

/* Optionally make the continue and save button look like primary */
input[name="_continue"]{
    border: 2px solid #5b80b2;
    background: #7CA0C7;
    color: white;
}

/* Hide the "Delete", "Add Another" and "Save" buttons, customize this to what you need  */
.deletelink, input[name="_addanother"], input[name="_save"]{
    display: none;
}

これらのボタンのクラスと名前は、django のバージョン間で変更される可能性があります。私は現在 Django 1.6.6 を使用していますが、最近変更されたとは思いません。これを管理サイト全体で有効にしたい場合は、admin/base_site.html デフォルト テンプレートを静的ディレクトリにコピーし、'extrahead' ブロックを上書きしてこのスタイルを含めることができます。base_site.htmlを参照してください。

CSS アプローチが役立つことを願っています :) 確かにエラーは発生しません。

于 2014-09-24T11:38:40.537 に答える