2015-02-10 100 views
1

基於Django管理站點文檔...我可以重寫ModelAdmin.add_view以注入一個自定義視圖。我需要注入一個TemplateView來覆蓋一個模型更改/添加管理頁面。Django將TemplateView傳遞給ModelAdmin.add_view

此自定義視圖將包含一個AngularJS應用程序,用於在管理員內部管理我的應用程序的一個複雜模型。

admin.py

class ContractAdmin(admin.ModelAdmin): 
    def add_view(self, request, form_url='', extra_context=None): 
     return ContractAdminView.???? (.as_view() doesn't work) 

# ContractAdminView is a TemplateView. 

PS:這是一個很好的方式來增加動力的形式/頁內Django管理的AngularJS?

回答

1

as_view()返回,你應該與request參數調用視圖功能:

def add_view(self, request, form_url='', extra_context=None): 
    return ContractAdminView.as_view()(request) 

任何自定義視圖添加到ModelAdmin應覆蓋ModelAdmin.get_urls()方法。爲了與管理佈局用戶界面相匹配,您的模板可以擴展admin/base_site.html模板:

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

{% block title %}My title{% endblock %} 

{% block content %} 

    My content and forms here. 

{% endblock %} 
+0

謝謝@catavaran。只有另一個小提示。我需要開發一個添加/更改管理頁面,它有很多表單域和一個angularjs(小應用程序),只能計算某些字段的值並更新另一個字段的值......或者我需要加載只有在用戶選擇了另一個FKField後才需要一些FKField。 我可以開發一個完整的angularjs/rest api堆棧(不含django格式);或者我可以使用Django ModelForm,我可以在模板中手動渲染以將ng-model指令添加到任何,並使其與角度保持同步。你認爲什麼是正確的做法? – 2015-02-11 08:52:18

+0

對不起,我從來沒有使用AngularJS,所以不能在這裏提出任何建議。 – catavaran 2015-02-11 08:59:17

+0

無論如何,謝謝。 現在我試圖用我的FormVIew覆蓋'admin/change_form.html'模板,但是我得到: NoReverseMatch at/admin/my_django_app/contract/add /「爲'app_list'反轉參數'()'和關鍵字參數'{​​u'app_label':''}'找不到。「 管理員文檔說:「你渲染的任何視圖使用管理模板,或擴展基本管理模板,應該提供current_app參數給RequestContext或上下文」... – 2015-02-11 09:12:31