2

я смог удалить «сохранить и добавить еще один» и «Сохранить и продолжить редактирование» кнопки, внедряя следующий код:Django admin model 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) 

Это прекрасно работает, когда я использую мой change_view, но когда я m, добавляя новый экземпляр модели, кнопки снова появляются. Я попробовал следующее:

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' 

Я использую Джанго-опекуна и интересно, если это каким-то образом вызывает мою проблему? Кто-нибудь знает, как избавиться от этих раздражающих кнопок из части страницы 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 1.6.6 и теперь я не думаю, что они изменились в последнее время. Если вы хотите, чтобы это было эффективно на всем сайте администратора, вы можете скопировать шаблон по умолчанию admin/base_site.html в свой статический каталог и перезаписать блок «extrahead», чтобы включить этот стиль. См. base_site.html.

Надеюсь, подход CSS поможет :) Это, безусловно, не вызовет ошибок для вас.

+0

Хорошее обходное решение - я приму это через несколько дней, если никто не сможет проследить причину ошибки. –

 Смежные вопросы

  • Нет связанных вопросов^_^