1

我正在使用 Django 1.4。我想在管理页面中添加一个队列,它应该看起来像管理 change_list 页面。我尝试了很多博客和其他论坛,但没有得到我想要的。如何在具有以下功能的管理页面中添加自定义视图,

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

模型.py

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

网址.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/ ,在那里我可以看到查询集。但我不知道如何生成或扩展类似 admin chagelist 页面。

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

管理员.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)

请帮助我在上述方法中的任何人中实现要求。

谢谢。

4

2 回答 2

2

与其创建自定义管理员更改视图,不如通过扩展内置视图来解决此问题,django 管理员提供了许多挂钩来促进这一点,这是我的想法:

  1. 修改默认查询集,但我建议您不要这样做,因为您失去了编辑查询集未返回的对象的能力。
  2. 创建一个自定义过滤器来显示您的“代理列表”查询集 - 我推荐这个,因为它会进一步为您提供 GET url 查询,您可以直接链接到以激活此过滤器。
  3. 您甚至可以完全删除更改视图并使用您自己的 - 这个选项我经验最少,无法评论。

您可能还希望查看更改更改列表模板管理自定义操作以进一步自定义外观并提供自定义“操作”;我过去曾成功使用这两种方法来提供项目特定的功能。

非常令人兴奋的是has_add_premissionhad_change_permissionhas_delete_permission钩子,将它们与 django-guradian 和自定义管理基本模板相结合,可以让您将后端管理员用作完整的前端管理。

一定要花时间通读整个模型管理页面——我越了解它,我发现自己编写自定义前端管理的代码就越少。

于 2012-09-23T18:49:46.697 回答
1

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

试试这个 django 库并与我们分享您的反馈。

在将其注册到 admin.py 后,您的视图应如下所示

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

请分享您对这个库的体验。

祝你有个好的一天

于 2013-12-26T19:51:19.583 回答