为什么在自定义清理表单中,request.user会产生错误?

2024-09-22 16:38:18 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么会这样请求用户在此db查询中获取全局名称“request”未定义错误? 无论是在外面还是里面? 此代码位于自定义清除定义中:

class QuestionForm(forms.Form):

    question= forms.CharField(label = ('question'))

    def clean_question(self):
        self.question = self.cleaned_data['question']
        self.question = self.question.lower()
        y = ''
        for c in self.question:
            if c != '?':
                y+=str(c)
        self.question = y
        try:
            QuestionModel.objects.get(question= self.question)
        except QuestionModel.DoesNotExist:
            x = QuestionModel(question= self.question)
            x.save()

        y = TheirAnswerModel.objects.get(user= request.user, question_id= x.id) #here

        try:
            x = QuestionModel.objects.get(question= self.question)
            y = TheirAnswerModel.objects.get(user= request.user, question_id= x.id) and here
            raise forms.ValidationError("You have already asked that question")
        except TheirAnswerModel.DoesNotExist:
            return self.question

Tags: 用户selfidgetobjectshererequestforms
1条回答
网友
1楼 · 发布于 2024-09-22 16:38:18

在引用request(注意它不是一个参数,希望不是全局的)的地方,它不存在于名称空间中。Django有意将表单与请求对象分离,因此需要创建自己的init方法,将其作为参数。你知道吗

class QuestionForm(forms.Form): 

    question = forms.CharField(label = ('question'))


    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(QuestionForm, self).__init__(*args, **kwargs)

    def clean_question(self):

        # this is the only line I modified (besides a little cleanup)
        request = self.request

        self.question = self.cleaned_data['question']
        self.question = self.question.lower()
        y = ''
        for c in self.question:
            if c != '?':
                y+=str(c)
        self.question = y
        try:
            QuestionModel.objects.get(question= self.question)
        except QuestionModel.DoesNotExist:
            x = QuestionModel(question= self.question)
            x.save()

        y = TheirAnswerModel.objects.get(user= request.user, question_id= x.id) #here

        try:
            x = QuestionModel.objects.get(question= self.question)
            y = TheirAnswerModel.objects.get(user= request.user, question_id= x.id) #and here
            raise forms.ValidationError("You have already asked that question")
        except TheirAnswerModel.DoesNotExist:
            return self.question

也许不重要,但你的第二次尝试对我来说没什么意义。你知道吗

相关问题 更多 >