Django在创建表单时将User实例传递给Forms

时间:2015-10-14 06:39:09

标签: python django forms

我有一个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类

非常感谢任何帮助

1 个答案:

答案 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)