Пользовательский вид Django на страницу администратора - PullRequest
28 голосов
/ 17 апреля 2011

Я создал пользовательский вид.

Как я могу вставить вид в админ?

Для обычного административного класса мы можем просто зарегистрировать его на сайте администратора:

class ListAdmin(admin.ModelAdmin):
   ...

admin.site.register(List, ListAdmin)

Я пытался переопределить get_url в admin.py, вопрос_просмотр это представление:

class ListAdmin(admin.ModelAdmin):
    def list_view(self, request):
        return question_list(request)

    def get_urls(self):
        urls = super(ListAdmin, self).get_urls()
        list_urls = patterns('', r'^list/$', self.list_view())

        return list_urls + urls

admin.site.register(question_list, ListAdmin)

Это вид списка вопросов:

def question_list(request):
    #questions = Question.objects.filter(topic__icontains = 1)
    questions = Question.objects.all()
    return render_to_response('admin/question_list.html', {'questions':questions})
question_list = staff_member_required(question_list)

Я получаю объект 'function', это не повторяемая ошибка.

Спасибо.

Ответы [ 4 ]

20 голосов
/ 17 апреля 2011

На основании предоставленной вами информации вам следует проверить эту часть документации Django:

Добавление просмотров на сайты администраторов (примечание: ссылка действительна для версии 1.5, поскольку версия 1.3 не являетсяподдерживается больше - решение остается в силе).

Тогда вы можете проверить этот пост в блоге и этот вопрос для получения дополнительной информации и подробностей.


Исходя из вашего примера, я действительно не понимаю, почему вы просто не используете обычный ModelAdmin с некоторыми параметрами фильтрации :

class QuestionAdmin(admin.ModelAdmin):
    list_filter = ('topic',)
5 голосов
/ 18 апреля 2011

Шаблон получает представление, а не результат его вызова, т. Е .:

list_urls = patterns('', r'^list/$', self.list_view())

должно быть

list_urls = patterns('', r'^list/$', self.list_view)

Кроме того, "list_view" (на данном этапе) является представлением, как и любое другое. Поэтому он должен будет возвращать объект HttpResponse.

def list_view(self, request):
    return question_list(request)

Вы не показываете код для question_list (), но у меня есть подозрение, что он не возвращает HttpResponse.

P.S .: Если вы предоставили трассировку исключения "function" object is not iterable "(вы получаете это при посещении" list / "?), Было бы меньше догадок.

3 голосов
/ 20 сентября 2014

Вот пример всего, что нужно добавить (начиная с Django 1.6) для пользовательской страницы, на которую будет ссылаться кнопка рядом с кнопкой «История» в верхнем правом углу страницы сведений об объекте:

https://gist.github.com/mattlong/4b64212e096766e058b7

0 голосов
/ 17 апреля 2011

Вы должны переопределить get_urls в вас ModelAdmin подкласс.

...