首页 > 解决方案 > ModelAdmin 中的 get_form 导致 TypeError

问题描述

这个问题是指我在这里遇到的尚未解决的问题。MemoForm我创建了一个新的简化版本来AdminMemoForm帮助我隔离问题。在创建表单的新版本后,我发现该get_form方法是导致TypeError: MemoForm object not callable.错误的新代码片段:

表格.py

class AdminMemoForm(forms.ModelForm):
    """
    Memo creation form, related to:

    :model: 'memos.Memo',
    """
    class Meta:
        model = Memo
        fields = (
            'title',
            'content',
            'important',
            'word_file',
            'receiver',
            'read',
            'unread',
        )

管理员.py

class CustomMemoAdmin(admin.ModelAdmin):
    form = AdminMemoForm

    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
    #     if not request.user.is_superuser:
    #         self.fields = (
    #             'title',
    #             'content',
    #             'important',
    #             'receiver',
    #             'read',
    #             'unread',
    #             'word_file',
    #         )
    #     self.filter_horizontal = ('casino',)
        return form()

完整的错误:

TypeError at /admin/memos/memo/add/
'MemoForm' object is not callable

另一个问题是为什么这个错误显示的是旧形式MemoForm而不是新形式AdminMemoForm?它已注册:admin.site.register(Memo, CustomMemoAdmin)

这可能很简单,但我不明白为什么会出现这个错误。任何帮助,将不胜感激。

标签: djangopython-3.x

解决方案


get_form()你的函数 的返回不应该是:return form没有引号,因为你通过调用创建了它super().get_form()


推荐阅读