【问题标题】:How to get value from form field in django framework?如何从 django 框架中的表单字段中获取价值?
【发布时间】:2011-06-10 00:38:28
【问题描述】:

如何从 django 框架中的表单字段中获取值?我想在视图中执行此操作,而不是在模板中...

【问题讨论】:

    标签: python django


    【解决方案1】:

    Using a form in a view 解释得差不多了。

    在视图中处理表单的标准模式如下所示:

    def contact(request):
        if request.method == 'POST': # If the form has been submitted...
            form = ContactForm(request.POST) # A form bound to the POST data
            if form.is_valid(): # All validation rules pass
                # Process the data in form.cleaned_data
                # ...
    
                print form.cleaned_data['my_form_field_name']
    
                return HttpResponseRedirect('/thanks/') # Redirect after POST
        else:
            form = ContactForm() # An unbound form
    
        return render_to_response('contact.html', {
            'form': form,
        })
    

    【讨论】:

    • 绑定表单的示例:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
    • 当字段实际上在 form.data 或 form.cleaned_data 中时,为什么模板可以运行 {{ form.name_of_field }}?
    【解决方案2】:

    任你选:

    def my_view(request):
    
        if request.method == 'POST':
            print request.POST.get('my_field')
    
            form = MyForm(request.POST)
    
            print form['my_field'].value()
            print form.data['my_field']
    
            if form.is_valid():
    
                print form.cleaned_data['my_field']
                print form.instance.my_field
    
                form.save()
                print form.instance.id  # now this one can access id/pk
    

    注意:该字段一旦可用就会被访问。

    【讨论】:

    • 这个答案最好地总结了所有选项 - 访问原始 POST 数据、未验证的表单字段和最终验证的表单字段。
    • 也许我今天看屏幕太久了,但我花了一个小时才找到这个非常简单的解决方案form['my_field'].value() 用于在 POST 请求中访问表单值。有些日子:|
    【解决方案3】:

    您可以在验证数据后执行此操作。

    if myform.is_valid():
      data = myform.cleaned_data
      field = data['field']
    

    另外,阅读 django 文档。他们是完美的。

    【讨论】:

    • b4 你清理你的数据怎么样?
    • 在清理数据之前,只有 request.POST 与表单实例一起存储。清理是将 POST 数据与表单字段相关联的方法。在清理之前,您必须使用 request.POST。
    • 如果设置了初始值,是否可以获得formField的值?
    【解决方案4】:

    我使用 django 1.7+ 和 python 2.7+,上面的解决方案不起作用。 表单中的输入值可以使用 POST 获取,如下所示(使用与上面相同的表单):

    if form.is_valid():
      data = request.POST.get('my_form_field_name')
      print data
    

    希望这会有所帮助。

    【讨论】:

      【解决方案5】:

      要从发送 post 请求的表单中检索数据,您可以这样做

      def login_view(request):
          if(request.POST):
              login_data = request.POST.dict()
              username = login_data.get("username")
              password = login_data.get("password")
              user_type = login_data.get("user_type")
              print(user_type, username, password)
              return HttpResponse("This is a post request")
          else:
              return render(request, "base.html")
      

      【讨论】:

        【解决方案6】:

        如果你使用的是 django 3.1 及以上版本,这很容易

        def login_view(request):
            if(request.POST):
                yourForm= YourForm(request.POST)
                itemValue = yourForm['your_filed_name'].value()
                # Check if you get the value
                return HttpResponse(itemValue )
            else:
                return render(request, "base.html")
        

        【讨论】:

        • 如果方法是“GET”,有没有办法将yourForm['your_field_name']'min'中的属性值设置为变量的值?我有一个具有 NumberInput 小部件字段的表单,但我试图在我的 views.py 文件中设置它。当我打印 yourForm.fields['form_field'] 时,我只能作为一个类访问该字段,其中“min”似乎无法访问。这是我在控制台中看到的:
        • 这是最好的答案,特别是如果您使用文档中的默认表单示例
        【解决方案7】:

        Cleaned_data 将提交的表单转换为 dict,其中 keys 表示表单中使用的属性名称,value 是用户提交的响应。访问我们编写的视图中的特定值:

        formname.cleaned_data['fieldname']
        

        【讨论】:

          猜你喜欢
          • 2021-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-04
          • 2018-05-16
          • 1970-01-01
          相关资源
          最近更新 更多