如何从Django框架的表单字段中获取价值?


104

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

Answers:


129

在视图中使用表单几乎可以解释这一点。

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

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()
Bob Stein

当字段实际上位于form.data或form.cleaned_data中时,为什么模板可以运行{{form.name_of_field}}?
user3245268

56

选择:

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

注意:该字段可用时将立即对其进行访问。


4
该答案最好地总结了所有选项-访问原始POST数据,未经验证的表单字段以及最终经过验证的表单字段。
Serge Merzliakov

2
也许今天我只是在看我的屏幕太久了,但是花了一个小时才找到这个非常简单的解决方案form['my_field'].value(),该解决方案用于在POST请求中访问表单值。几天:|
ionalchemist

28

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

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

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


13
b4清理数据怎么样?
Sevenearths,2014年

2
在清理数据之前,只有与表单实例一起存储的request.POST。清理是将POST数据与表单字段相关联的工具。清洁之前,您必须使用request.POST。
freb 2014年

如果设置了初始值,是否可以获取formField的值?
Fydo 2014年

8

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

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")

7

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

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

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.