我正在使用Django 1.4。我想在管理页面中添加一个看起来像admin change_list页面的队列。我尝试了很多博客和其他论坛,但没有得到我想要的东西。如何在管理页面中添加具有以下功能的自定义视图
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 /,在那里我可以看到查询集。但我不知道如何生成或扩展像admin 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)
请帮助我在上述任何一种方法中实施该要求。
感谢。
答案 0 :(得分:2)
而不是创建自定义管理员更改视图我会通过扩展内置的一个来解决这个问题,django管理员提供了许多钩子来促进这一点,这里是我的想法:
您可能还希望更改change list template和admin custom actions,以进一步自定义外观并提供自定义“操作”;我过去已成功使用它们来提供项目特定的功能。
非常令人兴奋的是has_add_premission,had_change_permission
和has_delete_permission
个钩子,像django-guradian和自定义管理员基础模板一样可以让你使用后端管理员作为一个完整的前端管理。
花点时间仔细阅读整个模型管理页面 - 我知道的越多,我发现自己编写自定义前端管理的次数越少。
答案 1 :(得分:1)
如果您想在管理网站上显示自定义视图,可以使用“django admin plus” 它是一个库,允许您将自定义视图绑定到管理站点。您可以在该视图中使用您选择的查询和模型,并继续进行,因为它不是管理站点。
尝试this django library并与我们分享您的反馈意见。
将您的视图注册到admin.py
后,您的视图应如下所示@admin.site.register_view('pathname')
def my_view(request):
do_something
与我们分享您的经验。
有一个好的