gpt4 book ai didi

django - 如何将额外的参数传递给 django 管理自定义表单?

转载 作者:行者123 更新时间:2023-12-03 13:42:30 24 4
gpt4 key购买 nike

如您所知,我们可以定义一个 ModelForm,然后通过在 modelAdmin 类中设置表单属性来替换添加和更改表单。例如:

class FooAdminForm(django.forms.ModelForm):
class Meta:
model = Foo

def __init__(self, *args, **kwargs):
super(FooAdminForm, self).__init__(self, *args, **kwargs)


class FooAdmin(admin.ModelAdmin):
form = FooAdminForm

在一个简单的 View 中,我们可以初始化一个表单对象并将额外的参数传递给 初始化 形式的作用。像这样:
def my_view(request):
form = FooAdminForm(p1='aaa', p2='bbb')

然后在 初始化 函数我们可以访问这些参数。
self.p1 = kwargs.pop('p1')
self.p2 = kwargs.pop('p2')

但是如何将参数传递给 modelAdmin 表单?我只能将表单类传递给 modelAdmin 表单属性,并且无法像在 View 中那样初始化它。

我在这里找到了关于 stackoverflow 的解决方案:

Use a form with a custom __init__ in Django Admin

但它为表单对象添加了一个动态属性,我认为这有点骇人听闻。有没有更好或正式的方法来做到这一点?

最佳答案

我四处寻找解决方案,并在 Django 的问题跟踪器中找到了一个优雅的解决方案:

def get_form(self, request, obj=None, **kwargs):
Form = super().get_form(request, obj=None, **kwargs)
return functools.partial(Form, user=request.user)
https://code.djangoproject.com/ticket/27240#comment:9
因此,如果您使用自定义表单,只需将其传递给 super().get_form()使用 kwargs
def get_form(self, request, obj=None, **kwargs):
kwargs['form'] = FooAdminForm
Form = super().get_form(request, obj=None, **kwargs)
return functools.partial(Form, user=request.user)

关于django - 如何将额外的参数传递给 django 管理自定义表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38811627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com