我有一个Django表单,我希望在创建表单时传递用户实例
第一种方法
这是我创建表单并传递用户实例的地方:
form = QuestionForm(request.user, request.POST)
在QuestionForm里面
def __init__(self, user, *args, **kwargs):
super(QuestionForm, self).__init__(*args, **kwargs)
self.data = user
log.info(self)
Study.objects.filter(owner = self.data.id))
第二种方法 这是我创建表单并传递请求的地方:
form = QuestionForm ( ..., request=request)
在QuestionForm里面
def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
super(MyForm, self).__init__(*args, **kwargs)
ref = forms.ModelChoiceField(queryset=Study.objects.filter(owner = self.request.user.id))
现在我收到的错误是self未定义,因此我无法获取用户ID来查询Study类
非常感谢任何帮助
答案 0 :(得分:1)
如果您在字段声明部分中执行此代码,例如
class QuestionForm(forms.Form):
ref = forms.ModelChoiceField(queryset=Study.objects.filter(owner=...)
然后它将无法工作,因为它仍然没有自变量。
您可以在 init 方法中执行此操作
class QuestionForm(forms.Form):
ref = forms.ModelChoiceField()
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['ref'].queryset = Study.objects.filter(owner=request.user)