Làm cách nào để lấy giá trị từ trường biểu mẫu trong khung công tác django?


104

Làm cách nào để lấy giá trị từ các trường biểu mẫu trong khuôn khổ django? Tôi muốn thực hiện việc này trong các dạng xem, không phải trong các mẫu ...

Câu trả lời:


129

Sử dụng một biểu mẫu trong một dạng xem giải thích khá nhiều điều đó.

Mẫu chuẩn để xử lý biểu mẫu trong dạng xem trông như sau:

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,
    })

Ví dụ về dạng ràng buộc đó:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein

Tại sao một mẫu có thể chạy {{form.name_of_field}}, khi các trường thực sự ở dạng form.data hoặc form.cleaned_data?
user3245268 22/02/19

56

Bạn chọn đi:

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

Lưu ý: trường được truy cập ngay khi có sẵn.


4
Câu trả lời này tóm tắt tốt nhất tất cả các tùy chọn - truy cập dữ liệu POST thô, các trường biểu mẫu chưa được xác thực và cuối cùng là các trường biểu mẫu đã được xác thực.
Serge Merzliakov

2
Có lẽ hôm nay tôi đã nhìn vào màn hình của mình quá lâu, nhưng tôi đã mất một giờ để tìm ra giải pháp rất đơn giản này form['my_field'].value()để truy cập các giá trị biểu mẫu theo yêu cầu POST. Một số ngày: |
ionalchemist

28

Bạn có thể thực hiện việc này sau khi xác thực dữ liệu của mình.

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

Ngoài ra, hãy đọc các tài liệu django. Chúng thật hoàn hảo.


13
còn b4 bạn làm sạch dữ liệu của mình thì sao?
Sevenearths

2
Trước khi bạn làm sạch dữ liệu của mình, tất cả chỉ có request.POST được lưu trữ với mẫu biểu mẫu. Làm sạch là những gì liên kết dữ liệu POST với các trường biểu mẫu. Trước khi làm sạch, bạn sẽ phải làm việc với yêu cầu.POST.
freb

Có thể nhận giá trị của formField nếu ban đầu của nó được đặt không?
Fydo

8

Để lấy dữ liệu từ biểu mẫu gửi yêu cầu đăng bài, bạn có thể làm như thế này

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

Tôi sử dụng django 1.7+ và python 2.7+, giải pháp ở trên không hoạt động. Và giá trị đầu vào trong biểu mẫu có thể được sử dụng POST như bên dưới (sử dụng cùng một biểu mẫu ở trên):

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

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.