2

我能夠刪除「保存並添加另一個」和「保存並繼續編輯」通過執行以下代碼按鈕:當我用我的change_viewDjango管理模式add_view:如何刪除「保存並添加另一個」按鈕?

# 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) 

這個偉大的工程,但是當我在添加模型的新實例時,按鈕會重新出現。我試過如下:

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的監護人,並懷疑這是否是某種導致我的問題?有沒有人知道如何在添加新模型實例時從模板的submit_line部分中刪除這些惱人的按鈕?

回答

3

如果你想隱藏這些按鈕明白爲了美觀的目的,你也可以使用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默認模板複製到您的靜態目錄中,並覆蓋「額外」模塊以包含此樣式。見base_site.html

希望CSS方法有助於:)它肯定不會爲您造成任何錯誤。

+0

很好的解決方法 - 如果沒有人能夠追蹤錯誤原因,我會在幾天內接受它。 – 2014-09-24 14:55:32

相關問題