【问题标题】:how to access session variable inside form class如何访问表单类中的会话变量
【发布时间】:2018-09-11 11:49:26
【问题描述】:

您好,我有一个会话变量 city,如何在表单类中访问它。

类似的东西

类 LonginForm(forms.Form):

current_city=request.city

【问题讨论】:

  • A Form 默认情况下无法访问 request 对象,但您可以创建一个将其考虑在内并对其进行处理的构造函数。
  • 我在LoginForm里面是这样弄的
  • 当然在视图中,然后您需要使用 request 对象来构造它。
  • 我在 LoginForm 类 LonginForm(forms.Form): def __init__(self,request,*args,**kwargs): super(LoginForm,self).__init__(*args ,**kwargs) current_city=request.city 当我这样做时,我得到这个错误 __init__() missing 1 required positional argument: 'request'
  • 我会试试看

标签: django django-forms


【解决方案1】:

默认情况下,Form 无法访问 request 对象,但您可以创建一个将其考虑在内并对其进行处理的构造函数。例如:

class LonginForm(forms.Form):

    def __init__(self, *args, request=None, **kwargs):
        super(LonginForm, self).__init__(*args, **kwargs)
        self.request = request  # perhaps you want to set the request in the Form
        if request is not None:
            current_city=request.city

在相关视图中,你需要传递请求对象,比如:

def some_view(request):
    my_form = LonginForm(request=request)
    # ...
    # return Http Response

或者在基于类的视图中:

from django.views.generic.edit import FormView

class LonginView(FormView):
    template_name = 'template.html'
    form_class = LonginForm

    def get_form_kwargs(self, *args, **kwargs):
        kwargs = super(LonginView, self).get_form_kwargs(*args, **kwargs)
        kwargs['request'] = self.request
        return kwargs

【讨论】:

  • 我正在做同样的事情,但我怎样才能在会话中保存它?我无法访问request.session['key']
  • @Deshwal: self.request.session['key'] = ...?话虽如此,会话变量应该很少使用,特别是因为它们不是持久的。
  • 如果我在一段时间后提出另一个问题,你能帮我吗?请你看一下。因为它对人们来说有点复杂,他们看不到。我将在此处发布我的问题的链接。请回答一下好吗?
  • 您能告诉我为什么 [此表单](stackoverflow.com/questions/57830992/…) 没有按预期工作吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 2014-03-04
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多