【问题标题】:Django admin add_view/ change_view for inline内联的 Django 管理员 add_view/change_view
【发布时间】:2017-06-28 21:27:02
【问题描述】:

在 Django admin 中,我们可以像这样覆盖 ModelAdmin 类中的 add_view 和 change_view 函数..

class ProductAdmin(admin.ModelAdmin)
    def add_view(self, request, form_url='', extra_context=None):

        self.readonly_fields = (...)
        //other code
        return super(ProductAdmin, self).add_view(request, form_url='', extra_context=None)
    inlines = [SubProdInLine,]

change_view 也与上面类似。

但是,内联模型管理员并非如此。无论如何,我们可以为下面的内联复制相同的内容吗?请注意,以下代码不起作用。我只是希望能够做类似的事情。

class SubProdInLine(admin.TabularInLine)
    def add_view(self, request, form_url='', extra_context=None):

        self.readonly_fields = (...)
        //other code
        return super(SubProdInLine, self).add_view(request, form_url='', extra_context=None)

基本上,我希望能够更改 add_view 中的 readonly_fields。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    您不应该在add_view 方法中修改readonly_fields - 它可能会影响其他请求。

    相反,您可以覆盖get_readonlyfields。如果对象是None,则表示您正在添加一个新对象。

    class ProductAdmin(admin.ModelAdmin)
        def get_readonly_fields(self, obj):
            if obj is None:
                # We are adding an object
                return ('field1', 'field2',)
            else:
                return self.readonly_fields
    

    然后,您也可以为您的内联类覆盖 get_readonly_fields

    class SubProdAdmin(admin.TabularInLine)
        def get_readonly_fields(self, obj):
            if obj is None:
                # We are adding an object
                return ('field1', 'field2',)
            else:
                return self.readonly_fields
    

    【讨论】:

    • Erm 问题是 obj 是 Product 的一个实例,而不是 SubProd 的实例:-/ 意味着 Product change_view,我希望能够更改内联的 readonly_fields。就像当我向 Product 添加一个 SubProd 实例时,我应该能够更改它的 readonly_fields ..
    • 如果objSubProdAdmin.get_readonly_fields 中的Product,那么您需要深入挖掘内部结构。恐怕我不知道一个简单的方法。
    • 是的,你说得对,我将不得不添加一些 JS 来完成我的工作。我对 JS 的工作并不多,希望 Django 管理员有一些功能可以帮助我。不过还是谢谢..
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多