自定义django admin
说些不是django 文档中的东西,首先,一个Admin 类是继承自admin.ModelAdmin,这个类是个callable类,有一个__call__方法,下面是一个例子
def __call__(self, request, url):
if url is None:
return self.changelist_view(request)
if url.endswith('parameter'):
return self.parameter_builder(request, url.split('/')[0])
elif url.endswith('approve'):
return self.approve(request, url.split('/')[0])
return super(ProductAdmin, self).__call__(request, url)
request就是HttpRequest,而url 在django admin中是admin_url/app_name/model_name/后面部分,在列表页面中,它是None, 在编辑窗体中,它通常就是model 的id,所以在这里,url.split('/')[0]就取得的model 的id
在admin.ModelAdmin中,参见django.contrib.admin.options,__call__方法根据url的不同转向不同的视图,他们分别是:如果url是None,转向changelist_view
add_view ,如果url是add,history_view 针对url结尾是/history,delete_view,如果url是以/delete结尾,其它,通通转向change_view. 你可以看到add_view,history_view,delete_view,change_view都是标准的django view,你可以覆盖这些view或是如上例,重载__call__,添加自定义的url进行处理
继续下去,add_view/change_view默认对应change_form.html,changelist_view对应change_list.html但这些均可以重载掉
class ProducAdmin(admin.ModelAdmin):
change_form_template='你自己的change_form_template'
change_list_template='你自己的列表模板 '
delete_confirmation_template='你自己的删除确认模板'
object_history_template='你自己的操作历史模板'
添加自己的url时,通常使用的是相对url的技巧,比方说在change_form中
<a href='parameter/'>参数</a>,则实际的url会是/admin_url/app_name/model_url/model_id/parameter/
说些不是django 文档中的东西,首先,一个Admin 类是继承自admin.ModelAdmin,这个类是个callable类,有一个__call__方法,下面是一个例子
def __call__(self, request, url):
if url is None:
return self.changelist_view(request)
if url.endswith('parameter'):
return self.parameter_builder(request, url.split('/')[0])
elif url.endswith('approve'):
return self.approve(request, url.split('/')[0])
return super(ProductAdmin, self).__call__(request, url)
request就是HttpRequest,而url 在django admin中是admin_url/app_name/model_name/后面部分,在列表页面中,它是None, 在编辑窗体中,它通常就是model 的id,所以在这里,url.split('/')[0]就取得的model 的id
在admin.ModelAdmin中,参见django.contrib.admin.options,__call__方法根据url的不同转向不同的视图,他们分别是:如果url是None,转向changelist_view
add_view ,如果url是add,history_view 针对url结尾是/history,delete_view,如果url是以/delete结尾,其它,通通转向change_view. 你可以看到add_view,history_view,delete_view,change_view都是标准的django view,你可以覆盖这些view或是如上例,重载__call__,添加自定义的url进行处理
继续下去,add_view/change_view默认对应change_form.html,changelist_view对应change_list.html但这些均可以重载掉
class ProducAdmin(admin.ModelAdmin):
change_form_template='你自己的change_form_template'
change_list_template='你自己的列表模板 '
delete_confirmation_template='你自己的删除确认模板'
object_history_template='你自己的操作历史模板'
添加自己的url时,通常使用的是相对url的技巧,比方说在change_form中
<a href='parameter/'>参数</a>,则实际的url会是/admin_url/app_name/model_url/model_id/parameter/