user168983
user168983

Reputation: 844

Django Form request not saving data to db

I am using a django form in atemplate to save data entered to database. In my view after the request is made, the response is redirected correctly but the data is not saved to db.

I might be missing something. but am unable to find it even after a lot of debugging.

here is what has been done so far:

views.py:

from .models import testmodel

def testview(request):
    if request.method== 'POST':
        form=MapForm(request.POST)
        if form.is_valid():
            test1=request.POST.get('t1')
            print meaningid1
            test2=request.POST.get('t2')
            print meaningid2
            pobj=testmodel(test1=test1,test2=test2)
            pobj.save()
        return HttpResponse('Successful')

after this the response message "Successful" is seen

from template:

 <form action="/testview/" method="post"> {% csrf_token %}
 {{form.as_p}}
 <input type="text" name="t1" value='' id='t1'/> <br><br><br>
  <input type="text" name="t2" value='' id='t2'/><br>
  <input type="submit" value="Submit" />
 </form>

from forms.py:

from .models import testmodel


class MapForm(forms.ModelForm):

    class Meta:
        model = testmodel
        fields = ['test1','test2']

after the data is entered in form it is going to page /testview and showing message on page. but from backend data is not been saved to db. Can some one suggest what could be done

Thanks

Upvotes: 0

Views: 113

Answers (1)

e4c5
e4c5

Reputation: 53774

In python, indentation matters.

def testview(request):
    if request.method== 'POST':
        form=MapForm(request.POST)
        if form.is_valid():
            test1=request.POST.get('t1')
            print meaningid1
            test2=request.POST.get('t2')
            print meaningid2
            pobj=testmodel(test1=test1,test2=test2)
            pobj.save()
        return HttpResponse('Successful')

In the above code 'Successful' will be displayed regardless of whether the form is actually successful or not. You need to push your return statement four spaces to the right, and you also need to add an else clause which handles the situation where the form is not valid. Typically that is just to display the form again (with form errors which wil be displayed for you automatically is you use form.as_p or form.as_table)

Upvotes: 1

Related Questions