Пользовательский вид 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" не является итерируемой ошибкой.
Спасибо.
Ответы
Ответ 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
.