【问题标题】:global name 'request' is not defined: overriding form_valid未定义全局名称“请求”:覆盖 form_valid
【发布时间】:2015-01-09 06:11:42
【问题描述】:

我有一个 UpdateView,我正在覆盖 form_valid 方法。由于某种原因,“请求”显示为未在覆盖的方法中定义。这是完整的课程:

 class UpdateTopic(UpdateView):
        model = Post
        slug_field = 'pk'
        slug_url_kwarg = 'pk'
        form_class = CommentForm
        template_name = "forums/update_topic.html"

        def form_valid(self, form): 
            user = self.request.user 
            rep = self.request.user.player.get_rep_total

            # protect the system against url input attacks
            if user == self.object.user or rep >=2500:
                self.object = form.save(commit=False)
                self.object.updated_by = self.request.user 
                self.object.save()
                messages.add_message(request, message.SUCCESS, "<strong>Success:</strong> The comment was edited successfully!")
            else:
                messages.add_message(request, message.ERROR, "<strong>Failed:</strong> You don't have the access level to edit that post!")

问题出在messages.add_message(request, message.SUCCESS, "&lt;strong&gt;Success:&lt;/strong&gt; The comment was edited successfully!")这一行 似乎request 超出了范围。为什么要这样做?有没有办法解决这个问题?

【问题讨论】:

  • 应该是self.request 而不是request
  • @limelights 也许您可以将其发布为答案?

标签: python django django-forms django-views


【解决方案1】:

应该是self.request 而不是request

messages.add_message(self.request, message.ERROR, "...")

【讨论】:

  • 我之前试过这个。现在我收到错误:未定义全局名称“消息”。
  • 是的,您使用的枚举 message.ERROR 未定义,因此您可能忘记导入它。
  • 我已导入消息:从 django.contrib 导入消息。我还需要导入“消息”吗?我以为这只是“add_message”方法的一部分
  • 不,你必须导入它。 from django.contrib.messages import constants as message.
  • 感谢您澄清这一点。
猜你喜欢
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2015-12-22
  • 2014-04-18
  • 2015-08-08
  • 2011-04-27
  • 2013-09-04
相关资源
最近更新 更多