Reputation: 291
I have created a custom view.
How can I insert the view into the admin?
For a normal admin class, we can just simply register it to the admin site:
class ListAdmin(admin.ModelAdmin):
...
admin.site.register(List, ListAdmin)
I tried to override get_url in admin.py, question_list is the view:
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)
This is the question_list view:
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)
I get 'function' object is not iterable error.
Thanks.
Upvotes: 29
Views: 59003
Reputation: 18972
Based on the information you provided you should check this part of Django's documentation:
Adding views to admin sites (note: the link is valid for version 1.5 since version 1.3 is not supported anymore - the solution is still valid).
Then you could check this blog post and this question for some further inspiration and details.
Based on your example I really don't get why you just don't use a regular ModelAdmin
with some filtering options:
class QuestionAdmin(admin.ModelAdmin):
list_filter = ('topic',)
Upvotes: 21
Reputation: 1022
Here's an example of everything needed to add (as of Django 1.6) for a custom page that will be linked to from a button next to the "History" button in the top right of an object's detail page:
https://gist.github.com/mattlong/4b64212e096766e058b7
Upvotes: 3
Reputation: 12968
The pattern gets a view, not the result of calling the view, i.e.:
list_urls = patterns('', r'^list/$', self.list_view())
should be
list_urls = patterns('', r'^list/$', self.list_view)
Also, "list_view" (at this stage) is a view like any other. So it will need to return an HttpResponse object.
def list_view(self, request):
return question_list(request)
You're not showing the code for question_list() but I have the suspicion it is not returning an HttpResponse.
P.S.: If you provided the traceback of the "'function' object is not iterable" exception (you're getting this when visiting "list/" ?) there'd be less guesswork.
Upvotes: 6