【问题标题】:Django pass TemplateView to ModelAdmin.add_viewDjango 将 TemplateView 传递给 ModelAdmin.add_view
【发布时间】:2023-03-03 15:15:01
【问题描述】:

基于 Django 管理站点文档...我可以覆盖 ModelAdmin.add_view 以注入一个自定义视图。我需要注入一个 TemplateView 来覆盖一个模型更改/添加管理页面。

此自定义视图将包含一个 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 Admin 中添加 AngularJS 驱动的表单/页面的好方法吗??

【问题讨论】:

    标签: python django angularjs django-admin


    【解决方案1】:

    as_view() 返回您应该使用request 参数调用的视图函数:

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

    要将任何自定义视图添加到ModelAdmin,您应该覆盖ModelAdmin.get_urls() 方法。为了与管理布局 UI 匹配,您的模板可以扩展 admin/base_site.html 模板:

    {% extends "admin/base_site.html" %}
    
    {% block title %}My title{% endblock %}
    
    {% block content %}
    
        My content and forms here.
    
    {% endblock %}
    

    【讨论】:

    • 谢谢@catavaran。只有另一个小提示。我需要开发一个添加/更改管理页面,它有很多表单字段和一个 angularjs(小型应用程序),仅用于计算某些字段的值并更新另一个字段的值......或者我需要加载的值某些 FKField 仅在用户选择了另一个 FKField 之后。我可以开发整个 angularjs / rest api 堆栈(没有 django 形式);或者我可以使用 Django ModelForm,我可以在模板中手动渲染以将 ng-model 指令添加到任何 ,并使其与 angular 保持同步。您认为正确的方法是什么?
    • 抱歉,我从来没有使用过 AngularJS,所以这里不能推荐任何东西。
    • 谢谢。现在我试图用我的 FormVIew 覆盖 'admin/change_form.html' 模板,但我得到: NoReverseMatch at /admin/my_django_app/contract/add/ “使用参数 '()' 和关键字参数反转 'app_list' {u'app_label': ''}' 未找到。”管理文档说“您呈现的任何使用管理模板或扩展基本管理模板的视图都应向 RequestContext 或 Context 提供 current_app 参数”...
    • 不要覆盖 admin/change_form.html - 此模板需要大量上下文变量:github.com/django/django/blob/master/django/contrib/admin/… 改为扩展 admin/base_site.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 2021-01-28
    • 2018-03-13
    • 1970-01-01
    • 2012-11-13
    • 2016-08-02
    • 2019-03-24
    相关资源
    最近更新 更多