我创建了一个自定义视图。
如何将视图插入管理员?
对于普通的管理类,我们只需将其注册到管理站点:
class ListAdmin(admin.ModelAdmin):
...
admin.site.register(List, ListAdmin)
我试图在admin.py中覆盖get_url,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'对象不是可迭代的错误。
感谢。
答案 0 :(得分:20)
根据您提供的信息,您应该查看Django文档的这一部分:
Adding views to admin sites(注意:该链接对版本1.5有效,因为版本1.3不再受支持 - 解决方案仍然有效。)
然后,您可以查看this blog post和question以获得更多灵感和细节。
根据您的示例,我真的不明白为什么您不使用常规ModelAdmin
和filtering options:
class QuestionAdmin(admin.ModelAdmin):
list_filter = ('topic',)
答案 1 :(得分:5)
模式得到一个视图,而不是调用视图的结果,即:
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。:如果你提供了''函数'对象的回溯是不可迭代的“异常(你在访问”list /“时得到这个吗?)那么猜测就会少一些。
答案 2 :(得分:3)
以下是一个示例,其中包含了一个自定义页面所需的所有内容(从Django 1.6开始),该页面将链接到对象详细信息页面右上角“历史记录”按钮旁边的按钮:
答案 3 :(得分:0)
您应该覆盖get_urls
子类中的ModelAdmin
。