简体   繁体   中英

django template form not saving data

I have a template form and trying to save some data. Upon clicking on the submit button the page just refreshes and nothing gets saved to the database. I don't get any errors on anything.

template

<form action="" method="post" id="salesform">
         {% csrf_token %}

        <input type="name" class="form-control" id="name" placeholder="Name">
        <input type="clinic" class="form-control" id="clinic_name" placeholder="Clinic">
        <input type="phone" class="form-control" id="phone" placeholder="Phone">
        <input type="email" class="form-control" id="email" placeholder="Email">
        <button id="sub" type="submit" class="btn btn-default">Submit</button>
      </form>

forms.py

class LeadForm(forms.ModelForm):
    name = forms.CharField(max_length=250, required= True,widget=forms.TextInput())
    clinic_name = forms.CharField(max_length=250, required= True,widget=forms.TextInput())
    phone = forms.CharField(max_length=8, required= True,widget=forms.TextInput(attrs={'type':'number'}))
    email = forms.CharField(max_length=250, required= False, widget=forms.TextInput())

    class Meta:
        model = Lead
        fields = ("clinic_name","phone")

views.py

def add_doc_info(request):
    d = getVariables(request,dictionary={'page_name': "Doctors",
    'meta_desc' : "Sign up "})

    if request.method == "POST":
        SalesForm = LeadForm(request.POST)

        if SalesForm.is_valid():
            name = SalesForm.cleaned_data['name']
            clinic_name = SalesForm.cleaned_data['clinic_name']
            phone = SalesForm.cleaned_data['phone']
            email = SalesForm.cleaned_data['email']

            #Saving to database
            lead = Lead(name=name, clinic_name=clinic_name, phone=phone, email=email)
            lead.save()


    else:
        SalesForm = LeadForm()


    return render(request,  'm1/add_doc_info.html', d, context_instance=RequestContext(request))

models.py

class Lead(models.Model):
    name = models.CharField(max_length=1300)
    clinic_name = models.CharField(max_length=1300)
    phone = models.IntegerField()
    email = models.EmailField(blank = True)
    submitted_on = models.DateField(auto_now_add=True)

    def __unicode__(self):
        return u"%s %s" % (self.clinic_name, self.phone)

Almost certainly the form is not valid, but you're not using it in your template so there is no way for it to display errors, or redisplay itself with partially-filled fields.

The Django documentation is fairly explicit on this, so I don't know why you have done something different. Pass the form into your context:

d['form'] = SalesForm
return render(request, 'm1/add_doc_info.html', d)

and use it in the template:

{{ form.errors }}
<form action="" method="post" id="salesform">
    {% csrf_token %}

    {{ form.name }}
    {{ form.clinic_name }} 
    {{ form.phone }}
    {{ form.email }}
    <button id="sub" type="submit" class="btn btn-default">Submit</button>
</form>

(Note also you've unnecessarily defined all the fields explicitly in the form, but also stated you are only using two of them in the meta class; also your is_valid block is mostly unnecessary as you can just call form.save() directly. Again, all this is shown fully in the documentation.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM