2013-07-19 21 views
26

Czy mogę mieć formularz w moim szablonie, który nie jest wspierany przez model. Nie potrzebuję przechowywać danych, potrzebuję tylko tych danych do wygenerowania mojego żądania POST w widoku.Czy mogę mieć formularz Django bez modelu

Szablon - Formularz z polami tekstowymi. Wyświetl - pobierz dane z formularza i wygeneruj kolejne żądanie.

Flow -> Formularz złożyć trwa do adresu URL, który wywołuje widok "

def form_handle(request): 
    if request.method=='POST' 
    form = request.POST 

    #blah blah encode parameters for a url blah blah 
    #and make another post request 

ale to stawia tylko token CSRF w zmiennej formie Czy jest jakiś sposób mogę uzyskać dostęp do tych pól tekstowych. szablon na moim form_handle widzenia?

wiem, jak to zrobić z modelem, ale nie mógł zrozumieć to!

Odpowiedz

37

Tak. to jest bardzo możliwe. Możesz przeczytać na Form objects. byłoby w taki sam sposób jak ty i leczyć ModelForm, z wyjątkiem tego, że nie jesteś związany przez model i musisz jawnie zadeklarować wszystkie atrybuty formularza.

def form_handle(request): 
    form = MyForm() 
    if request.method=='POST': 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      #now in the object cd, you have the form as a dictionary. 
      a = cd.get('a') 

    #blah blah encode parameters for a url blah blah 
    #and make another post request 
    #edit : added ": " after if request.method=='POST' 

i

class MyForm(forms.Form): #Note that it is not inheriting from forms.ModelForm 
    a = forms.CharField(max_length=20) 
    #All my attributes here 

W szablonie:

<form action="{% url form_handle %}" method="POST">{% csrf_token %} 
    {{form.as_p}} 
    <button type="submit">Submit</button> 
</form> 
+2

Awesome, całkowicie pomijane rzecz forms.Form. To powinno działać! Dzięki!!! – AdRoiT

Powiązane problemy