장고 프레임 워크의 양식 필드에서 값을 얻는 방법은 무엇입니까?


104

Django 프레임 워크의 양식 필드에서 값을 어떻게 얻습니까? 템플릿이 아닌 뷰에서이 작업을 수행하고 싶습니다.

답변:


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 2017-06-30

2
오늘 너무 오래 내 화면을보고 있었을 수도 있지만 form['my_field'].value()POST 요청에서 양식 값에 액세스하기위한 매우 간단한 솔루션을 찾는 데 한 시간이 걸렸습니다 . 언젠가 : |
ionalchemist

28

데이터의 유효성을 검사 한 후에이 작업을 수행 할 수 있습니다.

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

또한 django 문서를 읽으십시오. 그들은 완벽하다.


13
데이터를 정리하는 b4는 어떻습니까?
Robert Johnstone

2
데이터를 정리하기 전에 양식 인스턴스와 함께 저장된 request.POST 만 있습니다. 정리는 POST 데이터를 양식 필드와 연결하는 것입니다. 청소하기 전에 request.POST로 작업해야합니다.
freb aug

초기 값이 설정되어 있으면 formField의 값을 얻을 수 있습니까?
Fydo

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

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.