Django çerçevesinde form alanından nasıl değer elde edilir?


105

Django çerçevesindeki form alanlarından değerleri nasıl alırım? Bunu şablonlarda değil görünümlerde yapmak istiyorum ...

Yanıtlar:


130

Bir görünümde bir form kullanmak bunu hemen hemen açıklar.

Bir görünümde bir formu işlemek için standart model şuna benzer:

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

Bu bağlı forma örnek:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein

Alanlar gerçekte form.data veya form.cleaned_data içindeyken bir şablon neden {{form.name_of_field}} çalıştırabilir?
user3245268

57

İstediğini al:

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

Not: alana mevcut olduğu anda erişilir.


4
Bu cevap, ham POST verilerine, doğrulanmamış form alanlarına ve son olarak doğrulanmış form alanlarına erişim gibi tüm seçenekleri en iyi şekilde özetler.
Serge Merzliakov

2
Belki bugün ekranıma çok uzun zamandır bakıyordum, ancak form['my_field'].value()POST isteğinde form değerlerine erişmek için bu çok basit çözümü bulmam bir saatimi aldı . Bazı günler: |
ionalchemist

28

Verilerinizi doğruladıktan sonra bunu yapabilirsiniz.

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

Ayrıca django belgelerini okuyun. Harikalar.


13
peki ya verilerinizi temizleyen b4?
Robert Johnstone

2
Verilerinizi temizlemeden önce, yalnızca form örneğiyle depolanan request.POST vardır. Temizleme, POST verilerini form alanlarıyla ilişkilendiren şeydir. Temizlemeden önce request.POST ile çalışmanız gerekir.
freb

FormField değerinin başlangıç ​​değeri ayarlanmışsa alınması mümkün müdür?
Fydo

8

Gönderi isteği gönderen formdan veri almak için bunu şu şekilde yapabilirsiniz

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+ ve python 2.7+ kullanıyorum, yukarıdaki çözüm çalışmıyor. Formdaki giriş değeri aşağıdaki gibi POST kullanılarak elde edilebilir (yukarıdaki aynı formu kullanın):

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

Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.