Подтвердить что ты не робот

Пользовательский вид Django на странице администратора

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

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

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

class ListAdmin(admin.ModelAdmin):
   ...

admin.site.register(List, ListAdmin)

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

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)

Это представление question_list:

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" не является итерируемой ошибкой.

Спасибо.

4b9b3361

Ответ 1

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

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

Затем вы можете проверить этот пост в блоге и этот вопрос для дальнейшего вдохновения и деталей.


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

class QuestionAdmin(admin.ModelAdmin):
    list_filter = ('topic',)

Ответ 2

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

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 is not isable" исключена (вы получаете это при посещении "list/"?), было бы меньше догадок.

Ответ 3

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

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

Ответ 4

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