web-dev-qa-db-fra.com

Puis-je avoir un formulaire Django sans modèle

Puis-je avoir un formulaire dans mon modèle qui n'est pas soutenu par un modèle. Je n'ai pas besoin de stocker les données, j'ai juste besoin de ces données pour générer une POST demande de ma part dans la vue.

Modèle - Le formulaire avec des champs de texte. Afficher - obtenez les données du formulaire et générez une autre demande.

Flux -> Le formulaire de soumission prend une URL qui appelle la vue "

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

mais cela ne met que le jeton csrf dans la variable de formulaire. Existe-t-il un moyen d'accéder à ces champs de texte du modèle dans ma vue form_handle?

Je sais comment le faire avec un modèle mais je ne pouvais pas comprendre cela!

34
AdRoiT

Oui. C'est tout à fait possible. Vous pouvez lire sur Objets de formulaire . Ce serait de la même manière que vous traitez un ModelForm, sauf que vous n'êtes pas lié par le modèle et que vous devez déclarer explicitement tous les attributs du formulaire.

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'

et

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

Dans le modèle:

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