在 Django Admin 中使用带有自定义 __init__ 的表单

Iva*_*van 4 python django django-forms django-admin

我使用下面的代码在 Django Admin 中添加一个自定义表单:

class MyAdmin(admin.ModelAdmin):
    form = MyForm
Run Code Online (Sandbox Code Playgroud)

但是,该表单有一个重写的构造函数:

def __init__(self, author, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.author = author
Run Code Online (Sandbox Code Playgroud)

如何将 Admin 当前用户传递给表单构造函数?

Has*_*ani 5

MyAdmin像这样改变你的班级:

class MyAdmin(admin.ModelAdmin):
    form = MyForm

    def get_form(self, request, **kwargs):
        form = super(MyAdmin, self).get_form(request, **kwargs)
        form.current_user = request.user
        return form
Run Code Online (Sandbox Code Playgroud)

您现在可以forms.ModelForm通过访问来访问您的当前用户self.current_user

def __init__(self, author, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.author = author
    # access to current user by self.current_user
Run Code Online (Sandbox Code Playgroud)