Настраиваемая ссылка меню администратора Mezzanine

Я хочу добавить в выпадающее меню ссылку на элемент для экспорта всех записей в CSV, это код администратора:

class EntrantAdmin(admin.ModelAdmin):
list_display = ('__unicode__', 'email' , 'date_of_birth', 'postcode')
readonly_fields = ('date_of_birth', 'answer')
search_fields = ['email','first_name', 'last_name']

def get_urls(self):
    urlpatterns = patterns('',
        url(r'^export/$', self.admin_site.admin_view(self.export),
            name='competition_entrant_export'),
    )
    urlpatterns += super(EntrantAdmin, self).get_urls()
    return urlpatterns

def export(self, request, *args, **kwargs):
    # Get all the field names from the Entrant model so we can export them
    # in our csv file. We don't want the database primary key, though.
    fields = map(attrgetter('name'), Entrant._meta.fields)
    fields.remove('id')

    # Construct a File-like object, in this case a Response, to write
    # our csv data to. Also specify that it should be treated as an
    # attachment (if not in debug mode).
    stream = HttpResponse(mimetype='text/csv')
    if not settings.DEBUG:
        filename = 'competition.csv'
        stream['Content-Disposition'] = 'attachment; filename=' + filename

    writer = csv.DictWriter(stream, fields, dialect=quoteall)
    try:
        writer.writeheader()
    except AttributeError:  # Python < 2.7
        writer.writerow(dict(zip(fields,fields)))
    writer.writerows(Entrant.objects.values(*fields))

    return stream
admin.site.register(Entrant, EntrantAdmin)

и функциональность работает, если вы введете URL-адрес вручную "/admin/competition/entrant/export"

Как добавить новый пункт меню в ссылку меню dropdwon с URL-адресом: /admin/competition/entrant/export

выглядеть

Я хочу этот красный пункт меню

Как решить эту проблему?


person theZiki    schedule 19.06.2013    source источник


Ответы (1)


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

ADMIN_MENU_ORDER = (
    ("Content", ("pages.Page", "blog.BlogPost", "blog.Comment",
        ("Export Entrants", "competition_entrant_export"),)),
    ("Site", ("auth.User", "auth.Group", "sites.Site", "redirects.Redirect")),
)

Другой простой способ — использовать действие администратора django. Это будет немного хаком, так как вам нужно выбрать хотя бы один элемент, чтобы убедиться, что действие срабатывает правильно. Но если это штатный администратор, было бы легко научить их, как его использовать. В действии вы просто проигнорируете параметр набора запросов.

person dpn    schedule 20.06.2013