Как добавить кнопку рядом с кнопкой Добавить пользователя в Django Admin Site

Я работаю над проектом Django, где мне нужно извлечь список пользователей, чтобы преуспеть на экране пользователей Django. Я добавил переменную actions в свой класс Sample для получения CheckBox перед идентификатором каждого пользователя.

 class SampleClass(admin.ModelAdmin): actions =[make_published] 

Действие make_published уже определено. Теперь я хочу добавить еще одну кнопку рядом с кнопкой Add user , как показано на рис. Пользовательский экран администратора , Но я не знаю, как я могу добиться этого, используя новый шаблон. Я хочу использовать эту кнопку для печати выбранных пользовательских данных. Спасибо, пожалуйста, направляйте меня.

3 Solutions collect form web for “Как добавить кнопку рядом с кнопкой Добавить пользователя в Django Admin Site”

  1. Создайте шаблон в папке шаблона: admin / YOUR_APP / YOUR_MODEL / change_list.html
  2. Поместите это в этот шаблон

     {% extends "admin/change_list.html" %} {% block object-tools-items %} {{ block.super }} <li> <a href="export/" class="grp-state-focus addlink">Export</a> </li> {% endblock %} 
  3. Создайте функцию просмотра в YOUR_APP/admin.py и закрепите ее аннотацией

     from django.contrib.admin.views.decorators import staff_member_required @staff_member_required def export(self, request): ... do your stuff ... return HttpResponseRedirect(request.META["HTTP_REFERER"]) 
  4. Добавить новый URL-адрес в YOUR_APP/admin.py для настройки URL- YOUR_APP/admin.py для модели администратора

     from django.conf.urls import patterns, include, url class YOUR_MODELAdmin(admin.ModelAdmin): ... list def stuff ... def get_urls(self): urls = super(MenuOrderAdmin, self).get_urls() my_urls = patterns("", url(r"^export/$", export) ) return my_urls + urls 

Наслаждаться 😉

Хотя другие ответы полностью верны, я думаю, важно отметить, что совершенно необязательно добавлять кнопку, чтобы получить такое поведение. Вы можете использовать действия администратора, как и для действия make_published .

Это как преимущество не требовать переопределения какого-либо шаблона и, таким образом, предотвращает потенциальные проблемы при обновлении версии django (поскольку шаблоны администратора могут меняться, а изменения могут быть несовместимы с тем, как вы его перевернули).

 import csv from django.http import HttpResponse from django.utils import timezone def export_as_csv(modeladmin, request, queryset): opts = modeladmin.model._meta filename = format(timezone.now(), "{app}_{model}-%Y%m%d_%H%M.csv").format( app=opts.app_label, model=opts.model_name) response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="{}"'.format(filename) writer = csv.writer(response) field_names = [f.get_attname() for f in opts.concrete_fields] writer.writerow(field_names) for obj in queryset.only(*field_names): writer.writerow([str(getattr(obj, f)) for f in field_names]) return response 

Для этого выполняются действия администратора, добавление пользовательской кнопки на один шаг ближе к «чрезмерной настройке», а это означает, что, вероятно, время для написания ваших собственных просмотров.

У администратора много перехватов для настройки, но остерегайтесь использовать эти перехватчики исключительно. Если вам нужно предоставить более ориентированный на процесс интерфейс, который абстрагирует детали реализации таблиц и полей базы данных, то, вероятно, настало время написать свои собственные представления.

Цитата из вступительного параграфа документации Django Admin

Легкий и общепринятый способ – переопределить шаблон.

Если вы не хотите связываться с шаблонами Django, вы можете добавить класс Media к своему администратору и добавить javascript для создания кнопки, хотя я думаю, что создание элементов с javascript немного противно и их следует избегать.

Python - лучший язык программирования в мире.