2012-09-21 81 views
1

我正在使用Django 1.4。我想在管理页面添加一个应该看起来像admin change_list页面的队列。我尝试了很多博客和其他论坛,但没有得到我想要的。我怎样才能在管理页面中添加自定义视图与以下特点,Django在管理网站中添加自定义视图

  • 我自己的查询集
  • 应该看起来像有可用的所有功能,管理员修改列表页面。

models.py

class Broker(models.Model): 
    user = models.OneToOneField(User) 
    agency = models.CharField(max_length=100) 

urls.py

url(r'^admin/broker_list/$', 'room.admin_views.broker_list'), 
    url(r'^admin/', include(admin.site.urls)), 

admin_views.py

def broker_list(request): 
    return render_to_response(
     "admin/broker_list.html", 
     {'broker_list' : Broker.objects.filter(user__is_active=False)}, 
     RequestContext(request, {}), 
    ) 
broker_list = staff_member_required(broker_list) 

broker_list.html

{% extends "admin/base_site.html" %} 
{% load admin_urls %} 

{% block title %}List of pending agent{% endblock %} 

{% block content %} 
    {{broker_list}} 
{% endblock %} 

使用上述代码,我可以访问链接/ admin/broker_list /我可以看到queryset。但我不知道如何生成或扩展像管理员chagelist页面。

即使我厌倦了Django ModelAdmin的get_urls方法,但document指出my_view应该返回HttpResponse,因此它只呈现原始对象。为参考我下面分享我的代码,

admin.py

class ItemAdmin(admin.ModelAdmin): 
    model = Broker 
    def admin_list_broker(self, request): 
     print "yes iam here" 
     return HttpResponse("Hello!") 
     #return HttpResponseRedirect(
     #  reverse("admin:account_agent_changelist",) 
     #) 
    def get_urls(self): 
     from django.conf.urls.defaults import * 
     urls = super(ItemAdmin, self).get_urls() 
     my_urls = patterns('', 
      url(
       r'broker_list', 
       self.admin_site.admin_view(self.admin_list_broker), 
       name='admin_list_broker', 
      ), 
     ) 
     print my_urls + urls 
     return my_urls + urls 

admin.site.register(Broker, ItemAdmin) 

请帮我实现一个人的需求上面说的方法。

谢谢。

回答

1

而是然后创建一个自定义的管理员更改视图我将通过扩展内置的一个解决这个问题,Django管理提供了一些挂钩,以推动这项工作,这里有我的想法:

  1. 修改default queryset但是我会建议您不要这样做,因为您无法编辑未由查询集返回的对象。
  2. 创建一个custom filter这将显示您的'经纪商名单'queryset - 我推荐这一个,因为它会进一步给你一个GET网址查询,你可以直接链接到激活此过滤器。
  3. 你甚至可以完全gut out the change view并使用你自己的 - 这个选项我有最少的经验和无法评论。

你不妨也采取在外观改变change list templateadmin custom actions进一步定制的外观和感觉,并提供自定义的行为“;我过去成功地使用了这两种方法来提供项目特定的功能。

非常精彩的是has_add_premissionhad_change_permission,并has_delete_permission挂钩,这些夫妇与像Django的guradian和定制管理的基本模板可以让你使用的后端管理作为一个完整的前端管理。

请花点时间彻底阅读整个模型管理页面 - 我越了解越好,我发现自己编写自定义前端管理的代码越少。

0

如果您想在管理站点上显示自定义视图,您可以使用“django admin plus” 它的库允许您将自定义视图绑定到管理站点。您可以在该视图中使用您选择的查询和模型,并继续进行,因为它不是管理员站点。

尝试this django library并与我们分享您的反馈。

你的观点应该注册它admin.py的

@admin.site.register_view('pathname') 
def my_view(request): 
    do_something 

也同意使用该库的经验之后是这个样子。

有一个好的