将参数传递给 'getattr()' 获得的表单
Passing arguments to a form obtained by 'getattr()'
我正在创建一个视图,它根据使用 getattr() 函数给出的参数加载不同的表单:
form = getattr(forms, service.form)
但是在表单中我需要我的用户名来过滤我的文件,所以我有这个:
class MyForm(forms.Form):
filename = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple)
K = forms.CharField(label='K', max_length=1)
fullOut = forms.CharField(label='fullOut', max_length=1)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.user = kwargs.pop('user', None)
self.fields['filename'].queryset = userFile.objects.filter(self.user)
问题是我不知道如何在我的 getattr() 函数中传递 'request.user'。我知道如果它是静态的,它应该是这样的:
form = MyForm(user=request.user)
但我尝试过类似的方法:
form = getattr(forms, service.form, user=request.user)
它 work.I 并没有尝试这个,但是任何关于如何在表单中列出用户文件的想法都会受到欢迎。
提前致谢。
这与你使用getattr没有任何关系,问题出在你的__init__
方法上。您需要在 调用 super()
.
之前弹出 user
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(MyForm, self).__init__(*args, **kwargs)
您应该像往常一样实例化表单:
form = MyForm(user=request.user)
在同一个模块中是否声明MyForm
并不重要:
class MyForm(forms.Form):
my_field = forms.CharField()
form = MyForm(user=request.user)
或者如果您使用 getattr
动态地获得表单 class
MyForm = getattr(forms, service.form)
form = MyForm(user=request.user)
我正在创建一个视图,它根据使用 getattr() 函数给出的参数加载不同的表单:
form = getattr(forms, service.form)
但是在表单中我需要我的用户名来过滤我的文件,所以我有这个:
class MyForm(forms.Form):
filename = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple)
K = forms.CharField(label='K', max_length=1)
fullOut = forms.CharField(label='fullOut', max_length=1)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.user = kwargs.pop('user', None)
self.fields['filename'].queryset = userFile.objects.filter(self.user)
问题是我不知道如何在我的 getattr() 函数中传递 'request.user'。我知道如果它是静态的,它应该是这样的:
form = MyForm(user=request.user)
但我尝试过类似的方法:
form = getattr(forms, service.form, user=request.user)
它 work.I 并没有尝试这个,但是任何关于如何在表单中列出用户文件的想法都会受到欢迎。 提前致谢。
这与你使用getattr没有任何关系,问题出在你的__init__
方法上。您需要在 调用 super()
.
user
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(MyForm, self).__init__(*args, **kwargs)
您应该像往常一样实例化表单:
form = MyForm(user=request.user)
在同一个模块中是否声明MyForm
并不重要:
class MyForm(forms.Form):
my_field = forms.CharField()
form = MyForm(user=request.user)
或者如果您使用 getattr
MyForm = getattr(forms, service.form)
form = MyForm(user=request.user)