I need to create a form in my Odoo website so external users can register for a newsletter that is sent from my Odoo. So far I have created a website template and a controller. Thus far I have managed to display the form and do a Post as well as preload some additional many2many fields I need to fill the form but the data is not saved to the database when I hit submit. I have seen the website_portal and website_hr_recruitment models that have forms for people to fill out but I can't figure out where is the data saved and how it is done.
I include the following code from my own controller for reference:
My controller:
#http.route('/contact/register', type='http', auth='public', website='true')
def register(self, redirect=None, **post):
areas_interest = request.env['iica_contacts.area_interest'].sudo().search([])
topics_interest = request.env['iica_contacts.topic_interest'].sudo().search([])
products_interest = request.env['iica_contacts.products_interest'].sudo().search([])
countries = request.env['res.country'].sudo().search([])
if post:
return request.redirect('/contact/register/success')
values = {
'areas_interest' : areas_interest,
'topics_interest' : topics_interest,
'products_interest' : products_interest,
'countries' : countries,
}
return request.render("iica_contacts.register", values)
My Template:
<template id="register">
<t t-call="website.layout">
<t t-set="title">Register</t>
<form action="/contact/register" method="post">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="container">
<div class="row">
<div class="col-md-6 form-group">
<label for="first_name">First name:</label>
<input type="text" name="first_name" class="form-control" t-att-value="first_name" />
</div>
<div class="col-md-6 form-group">
<label for="last_name">Last name:</label>
<input type="text" name="last_name" class="form-control" t-att-value="last_name" />
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">Location information</div>
<div class="panel-body">
<div class="row">
<div class="col-md-12 form-group">
<label class="control-label" for="country_id">Country:</label>
<select name="country_id" class="form-control">
<option value=""> -- Select country -- </option>
<t t-foreach="countries" t-as="country">
<option t-att-value="country.id">
<t t-esc="country.name" />
</option>
</t>
</select>
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label for="company">Company:</label>
<input type="text" name="company" class="form-control" t-att-value="company" />
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label class="control-label" for="sector">Sector:</label>
<select name="sector" class="form-control">
<option value=""> -- Select sector -- </option>
<option value="1">Public</option>
<option value="2">Private</option>
<option value="3">ONG</option>
<option value="4">International Organization</option>
<option value="5">Financial</option>
<option value="6">Other</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label class="control-label" for="language">Language:</label>
<select name="sector" class="form-control">
<option value=""> -- Select language -- </option>
<option value="1">Spanish</option>
<option value="2">English</option>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">Contact information</div>
<div class="panel-body">
<div class="row">
<div class="col-md-12 form-group">
<label class="control-label" for="email">Email:</label>
<input type="email" name="email" class="form-control" />
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label class="control-label" for="phone">Phone number:</label>
<input type="tel" name="phone" class="form-control" />
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label class="control-label" for="contact_preference">Contact preference:</label>
<select name="contact_preference" class="form-control">
<option value=""> -- Select preference -- </option>
<option value="1">Telephone</option>
<option value="2">Email</option>
<option value="3">Text message (SMS)</option>
<option value="2">All of the above</option>
<option value="2">Dont contact me</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<ul class="nav nav-tabs">
<li class="active">Products of interest</li>
<li>Areas of interest</li>
<li>Topics of interest</li>
</ul>
<div class="tab-content">
<div id="products-interest" class="tab-pane fade in active">
<h3>Products of interest</h3>
<select name="products_interest" multiple="multiple" class="form-control">
<t t-foreach="products_interest" t-as="product">
<option t-att-value="product.id">
<t t-esc="product.name" />
</option>
</t>
</select>
</div>
<div id="areas-interest" class="tab-pane fade">
<h3>Areas of interest</h3>
<select name="areas_interest" multiple="multiple" class="form-control">
<t t-foreach="areas_interest" t-as="area">
<option t-att-value="area.id">
<t t-esc="area.name" />
</option>
</t>
</select>
</div>
<div id="topics-interest" class="tab-pane fade">
<h3>Topics of interest</h3>
<select name="topics_interest" multiple="multiple" class="form-control">
<t t-foreach="topics_interest" t-as="topic">
<option t-att-value="topic.id">
<t t-esc="topic.name" />
</option>
</t>
</select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button type="submit" class="btn btn-default btn-primary">
Register <span class="fa fa-long-arrow-right" />
</button>
</div>
</div>
</div>
</form>
</t>
I will really appreciate any help.
After investigating and trying a lot of stuff I managed to do this the following way:
def register(self, redirect=None, **post):
areas_interest = request.env['iica_contacts.area_interest'].sudo().search([])
topics_interest = request.env['iica_contacts.topic_interest'].sudo().search([])
products_interest = request.env['iica_contacts.products_interest'].sudo().search([])
countries = request.env['res.country'].sudo().search([])
values = {
'areas_interest' : areas_interest,
'topics_interest' : topics_interest,
'products_interest' : products_interest,
'countries' : countries,
}
if post:
error_message, valid = self._validate_form(post)
if valid == 1:
self._process_registration(post)
return request.redirect('/contact/register/success')
else:
return request.redirect('/contact/register/error')
else:
contact = request.env['iica_contacts.contact']
values.update({
'contact' : contact,
})
return request.render("iica_contacts.register", values)
The function that inserts to the model:
def _process_registration(self, post):
request.env['iica_contacts.contact'].create({
'name' : post.get('name'),
'company' : post.get('company'),
'country_id': post.get('country_id'),
'sector' : post.get('sector'),
'language' : post.get('language'),
'email' : post.get('email'),
'phone' : post.get('phone'),
'area_interest_ids' : self._process_many2may(request.httprequest.form.getlist('areas_interest')),
'product_interest_ids' : self._process_many2may(request.httprequest.form.getlist('products_interest')),
'topic_interest_ids' : self._process_many2may(request.httprequest.form.getlist('topics_interest')),
})
Related
I wanna create a appointment system but its not working now. I'dont have a error actually i just have a error and it's coming from views.py (messages.warning(request,"ERROR!")). When i opened the page its coming anyway i just wanna send my informations.
models.py: I created models but im not sure for policlinic and doctor because it doesn't seems like charfield text. It's a option field in HTML.
class Randevu(models.Model):
STATUS = (
('New', 'Yeni'),
('True', 'Evet'),
('False', 'Hayır'),
)
policlinic=models.ForeignKey(Policlinic,on_delete=models.CASCADE)
user=models.ForeignKey(User,on_delete=models.CASCADE)
doctor=models.ForeignKey(Doctors,on_delete=models.CASCADE)
phone = models.CharField(max_length=15)
email = models.CharField(max_length=50)
date=models.DateField(null=True)
time=models.TimeField(null=True)
payment= models.CharField(max_length=50)
insurance= models.CharField(max_length=50)
note=models.TextField(max_length=200)
status = models.CharField(max_length=10, choices=STATUS,default='New')
ip=models.CharField(max_length=20,blank=True)
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
def str(self):
return self.user.username
class AppointmentForm(ModelForm):
class Meta:
model=Randevu
fields=['phone','email','date','time','payment','insurance','note']
views.py:
def randevu(request):
setting=Setting.objects.get(pk=1)
policlinic=Policlinic.objects.all()
doctor=Doctors.objects.all()
context={'setting':setting ,'doctor':doctor,'policlinic':policlinic}
if request.method=='POST':
form=AppointmentForm(request.POST)
if form.is_valid():
current_user=request.user
data=Randevu()
data.user_id=current_user.id
data.phone=form.cleaned_data['phone']
data.email=form.cleaned_data['email']
data.date=form.cleaned_data['date']
data.time=form.cleaned_data['time']
data.payment=form.cleaned_data['payment']
data.insurance=form.cleaned_data['insurance']
data.note=form.cleaned_data['note']
data.ip=request.META.get('REMOTE_ADDR')
data.save()
messages.success(request,"DONE! :)")
return render(request,'randevu.html',context)
messages.warning(request,"ERROR!")
return render(request,'randevu.html',context)
urls.py
urlpatterns = [
path('randevu',views.randevu,name='randevu') ]
randevu.html
<!-- MAKE AN APPOINTMENT -->
<section id="appointment" data-stellar-background-ratio="3">
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-6">
<img src="{% static 'images/appointment-image.jpg' %}" class="img-responsive" alt="">
</div>
<div class="col-md-6 col-sm-6">
<!-- CONTACT FORM HERE -->
<form id="appointment-form" role="form" action="{% url 'randevu' %}" method="post">
<!-- SECTION TITLE -->
<div class="section-title wow fadeInUp" data-wow-delay="0.4s">
<h2>Randevu Alın</h2>
{%if messages%}
{%for message in messages%}
<div class="alert alert-{{message.tags}}"role="alert">
{{message}}
</div>
{%endfor%}
{%endif%}
</div>
{% csrf_token %}
<div class="wow fadeInUp" data-wow-delay="0.8s">
<div class="col-md-6 col-sm-6">
<label for="email">E-mail</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Your Email">
</div>
<div class="col-md-6 col-sm-6">
<label for="telephone">Telefon Numaranız</label>
<input type="tel" class="form-control" id="phone" name="phone" placeholder="Phone">
</div>
<div class="col-md-6 col-sm-6">
<label for="date">Tarih</label>
<input type="date" name="date" id="date" value="" class="form-control">
</div>
<div class="col-md-6 col-sm-6">
<label for="time">Zaman</label>
<input type="time" name="time" id="time" value="" class="form-control">
</div>
<div class="col-md-6 col-sm-6">
<label for="select">Poliklinik Seçiniz</label>
<select name="policlinic" class="form-control" id="policlinic">
{% for rs in policlinic %}
<option>{{rs.title}}</option>
{%endfor%}
</select>
</div>
<div class="col-md-6 col-sm-6">
<label for="select">Doktor Seçiniz</label>
<select name="doctor" class="form-control" id="doctor">
{% for rs in doctor %}
<option>{{rs.name}}</option>
{%endfor%}
</select>
</div>
<div class="col-md-6 col-sm-6">
<label for="select">Ödeme Yöntemi</label>
<select name="payment" class="form-control" id="payment">
<option>Nakit</option>
<option>Banka Kartı</option>
<option>Kredi Kartı</option>
<option>Diğer</option>
</select>
</div>
<div class="col-md-6 col-sm-6">
<label for="select">Sigorta</label>
<select name="insurance" class="form-control" id="insurance">
<option>SGK</option>
<option>AXA Sağlık Sigortası</option>
<option>Anadolu Sağlık Sigortası</option>
<option>Allianz Sağlık Sigortası</option>
<option>Akbank Sağlık Sigortası</option>
<option>Tamamlayıcı Türkiye Sağlık Sigortası</option>
<option>Diğer (Belirtiniz)</option>
</select>
</div>
<div class="col-md-12 col-sm-12">
<label for="Message">Belirtmek istediğiniz herhangi bir durum</label>
<textarea class="form-control" rows="5" id="note" name="note" placeholder="Notunuz"></textarea>
{%if user.id is not None%}
<button type="submit" class="form-control" id="cf-submit" name="submit">Submit Button</button>
{%else%}
Randevu oluşturmak için login olunuz!
{% endif %}
</div>
</div>
</form>
</div>
</div>
</div>
</section>
It's my appointment page:
enter image description here
Because get method is used to render the page
and in views.py you dont write
if request.method=='GET':
As a result, the error message is executed while there is no error
add this :
if request.method=='GET':
please I would like to ask for help. I'm creating a web-based application and I'm having a hard time when I try to get the data from the HTML form and receive it through the POST method in Django.
It's pulling data only from one field and I really appreciate your help in figuring out why it's not pulling information from the other fields only from the location field. Thank you very much!
HTML = create-request.html
<form action="{% url 'save_request' %}" id="checklistForm" name="checklistForm" enctype="multipart/form-data" method="POST">
{% csrf_token %}
<section id="step-1" class="form-step">
<div class="mt-3">
{% include 'home/1_resource-request.html' %}
</div>
</section>
</form>
HTML = home/1_resource-request.html
{% block stylesheets %}{% endblock stylesheets %} {% block content %}
<div class="pcoded-content">
<div class="pcoded-inner-content">
<div class="main-body">
<div class="page-wrapper">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<h5>Resource Request</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<form>
<div class="form-group">
<label for="checklistID">Checklist Number</label>
<input type="text" class="form-control" id="checklistID" name="checklistnum" placeholder="123456" disabled/>
</div>
<div class="form-group">
<label for="location_ID">CMPA Location</label>
<select class="form-control" id="location_ID" name="location">
<option selected>Select</option>
<option>Brazil</option>
<option>Canada</option>
<option>Mexico</option>
<option>SSA</option>
<option>United States</option>
</select>
</div>
</form>
</div>
<div class="col-md-6">
<form>
<div class="form-group">
<label for="support_id">CMPA Support Needed</label>
<select class="form-control" id="support_id" name="support">
<option selected>Select</option>
<option>Both</option>
<option>PMA - Financial Management</option>
<option>PMO - Project Administration</option>
</select>
</div>
<div class="form-group">
<label for="band_pma_id">Band (PMA)</label>
<select class="form-control" id="band_pma_id" name="band_pma">
<option selected>Select</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
<small id="textInfo1" class="form-text text-muted">There is no B4 for US and CA - in progress.</small>
</div>
<div class="form-group">
<label for="band_pmo_id">Band (PMO)</label>
<select class="form-control" id="band_pmo_id" name="band_pmo">
<option selected>Select</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
<small id="textInfo2" class="form-text text-muted"
>There is no B4 for US and CA - in progress.</small
>
</div>
<div class="mt-3">
<button class="button btn-navigate-form-step" type="button" step_number="2">Next</button>
<button class="button2 btn btn-outline-primary " type="submit">Save</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}
Django/Python = views.py
def save_request(request):
#print(request.POST)
if request.method == 'POST':
context = {}
location = request.POST.get('location', None)
support = request.POST.get('support', None)
band_PMA = request.POST.get('bandPMA', None)
band_PMO = request.POST.get('bandPMO', None)
ippf = request.POST.get('ippf', None)
print(location, support, band_PMA, band_PMO, ippf)
return render(request, 'home/create-request.html', context=context)
That html defines many different forms. The first form has the location input element, the second form has the support input element, and so on.
Only one form can be submitted at a time. By default it is the first form on the page, so that's why you only see the location element.
I think you need to rewrite the html to have only one form.
That is because you have many tags.
You need to keep only one, the one wrapping your include, so do that :
<form action="{% url 'save_request' %}" id="checklistForm" name="checklistForm" enctype="multipart/form-data" method="POST">
{% csrf_token %}
<section id="step-1" class="form-step">
<div class="mt-3">
{% include 'home/1_resource-request.html' %}
</div>
</section>
</form>
and that :
HTML = home/1_resource-request.html
{% block stylesheets %}{% endblock stylesheets %} {% block content %}
<div class="pcoded-content">
<div class="pcoded-inner-content">
<div class="main-body">
<div class="page-wrapper">
<div class="row">
<div class="col-sm-12">
<div class="card">
<div class="card-header">
<h5>Resource Request</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="checklistID">Checklist Number</label>
<input type="text" class="form-control" id="checklistID" name="checklistnum" placeholder="123456" disabled/>
</div>
<div class="form-group">
<label for="location_ID">CMPA Location</label>
<select class="form-control" id="location_ID" name="location">
<option selected>Select</option>
<option>Brazil</option>
<option>Canada</option>
<option>Mexico</option>
<option>SSA</option>
<option>United States</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="support_id">CMPA Support Needed</label>
<select class="form-control" id="support_id" name="support">
<option selected>Select</option>
<option>Both</option>
<option>PMA - Financial Management</option>
<option>PMO - Project Administration</option>
</select>
</div>
<div class="form-group">
<label for="band_pma_id">Band (PMA)</label>
<select class="form-control" id="band_pma_id" name="band_pma">
<option selected>Select</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
<small id="textInfo1" class="form-text text-muted">There is no B4 for US and CA - in progress.</small>
</div>
<div class="form-group">
<label for="band_pmo_id">Band (PMO)</label>
<select class="form-control" id="band_pmo_id" name="band_pmo">
<option selected>Select</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
<small id="textInfo2" class="form-text text-muted"
>There is no B4 for US and CA - in progress.</small
>
</div>
<div class="mt-3">
<button class="button btn-navigate-form-step" type="button" step_number="2">Next</button>
<button class="button2 btn btn-outline-primary " type="submit">Save</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}
I have two models one is Sales Invoice and Product model but I have only one form to sumbit data
product supposed to be multiple data.
sales_invoice is invoice detail models
Both models field submitted through only from one html form page
I wish to save product data in products and invoice data in invoice with created invoice number.
How Can save data separately in two models ?
views.py
if request.method == 'POST':
#SALES INVOICE
# sales_invoice details
invoice_number=request.POST['invoice_number']
invoice_date=request.POST['invoice_date']
customer_id=request.POST['customer_id']
special_instructions=request.POST['special_instructions']
#invoice total
total=request.POST['total']
CGST=request.POST['CGST']
SGST=request.POST['SGST']
discount=request.POST['discount']
round_off=request.POST['round_off']
grand_total=request.POST['grand_total']
#other details
user=request.POST['user']
remarks=request.POST['remarks']
#ITEM DETAILS
# item_details
sales_invoice_id = request.POST['sales_invoice_id']
items = request.POST['items']
items_obj= New_Stock_Entry.objects.get(item=items)
hsn = request.POST['hsn']
quantity = request.POST['quantity']
unit = request.POST['unit']
unit_obj = Unit_Setting.objects.get(unit_name=unit)
unit_price = request.POST['unit_price']
tax_code = request.POST['tax_code']
amount = request.POST['amount']
sales_details=Sales_Invoice.objects.create(invoice_number=invoice_number,invoice_date=invoice_date,customer_id=customer_id,special_instructions=special_instructions,total=total,CGST=CGST,SGST=SGST,discount=discount,round_off=round_off,grand_total=grand_total,user=user,remarks=remarks)
sales_details.save()
items=Items_Details.objects.bulk_create(sales_invoice_id=sales_invoice_id,items=items_obj,hsn=hsn,quantity=quantity,unit=unit_obj,unit_price=unit_price,tax_code=tax_code,amount=amount)
items.save()
sales_invoice.html
<form method="post">
{% csrf_token %}
<!-- Estimate Details -->
<div class="row pb-3 pt-3">
<div class="col-md mb-2">
<label>Invoice Number</label>
<input type="text" class="form-control" placeholder={{invoice_number}} disabled>
</div>
<div class="col-md mb-2">
<label>Date</label>
<input type="date" class="form-control" placeholder="Invoive_Date">
</div>
<div class="col-md mb-2">
<label>Select Customer</label>
<select id="customer_id" class="form-control" name="Customer">
<option value="">Select Customer</option>
{% if all_customers %}
{% for c in all_customers %}
<option value="{{c.customer_id}}">{{c.first_name}} {{c.surname}}</option>
{% endfor %}
{% endif %}
</select>
</div>
</div>
<div class="row pb-3">
<div class="col-md-4 mb-2">
<label>Contact Person Name</label>
<input type="text" class="form-control" id="contact_person_name" name="contact_person_name"
placeholder="Contact Person">
</div>
<div class="col-md-4 mb-2">
<label>Phone</label>
<input type="number" class="form-control" placeholder="Phone" id="phone" name="phone">
</div>
</div>
<div class="row pb-3">
<div class="col-md mb-2">
<label>Bill To</label>
<textarea type="text" class="form-control" placeholder="Bill To" id="bill_to"
name="bill_to"></textarea>
</div>
<div class="col-md mb-2">
<label>Ship To</label>
<textarea type="text" class="form-control" placeholder="Ship To" id="ship_to"
id="ship_to"></textarea>
</div>
<div class="col-md mb-2">
<label>Special Instructions</label>
<textarea type="text" class="form-control" placeholder="Special Instructions"
id="special_instructions" name="special_instructions"></textarea>
</div>
</div>
<!-- Items -->
<div class="card-header">
<div class="row">
<div class="col-auto m-1 pl-2">
<img src="{% static 'images/GIF/Add.gif'%}" width="30px" height="30px">
</div>
<div class="col mt-2">
<h5>Item Details</h5>
</div>
</div>
</div>
<div>
<!-- <form> -->
<div class="row pb-3 pt-3">
<div class="col-md mb-2">
<label>Item</label>
<select class="form-control" placeholder="Items" id="item" name="item">
<option value="">Item</option>
{% if all_items %}
{% for i in all_items %}
<option value="{{i.item}}">{{i.item}}</option>
{% endfor %}
{% endif %}
</select>
</div>
<div class="col-md mb-2">
<label>HSN</label>
<input type="text" class="form-control" placeholder="HSN" id="hsn" name="hsn">
</div>
<div class="col-md mb-2">
<label>Quantity</label>
<input type="number" class="form-control" placeholder="Quantity" id="quantity"
name="quantity">
</div>
<div class="col-md mb-2">
<label>Unit</label>
<select class="form-control" placeholder="Units" id="unit_name" name="unit_name">
<option value="">Unit</option>
{% if all_unit %}
{% for u in all_unit %}
<option value="{{u.unit_name}}">{{u.unit_name}}</option>
{% endfor %}
{% endif %}
</select>
</div>
<div class="col-md mb-2">
<label>Unit Price</label>
<input type="number" class="form-control" placeholder="Unit Price" id="unit_price"
name="unit_price">
</div>
<div class="col-md mb-2">
<label>Tax</label>
<input type="text" class="form-control" placeholder="Tax" id="tax_code" name="tax_code">
</div>
<div class="col-md mb-2">
<label>Amount</label>
<input type="text" class="form-control" placeholder="Amount" id="amount" name="amount">
</div>
<div class="col-auto">
<P><button type="button" class="w3-btn w3-blue" id="submit">Save</button>
</div>
</div>
<!-- </form> -->
</div>
<br>
<!-- Items table -->
<div id="tab">
<div class="table-responsive-md">
<table class="table table-sm" style="background-color: #e4f7f5;" id="demo">
<tbody id="items_tbody"></tbody>
</table>
</div>
</div>
<!-- Other Details -->
<div class="card-header">
<div class="row">
<div class="col-auto m-1 pl-2">
<img src="../static/images/GIF/Setting.gif" width="30px" height="30px">
</div>
<div class="col mt-2">
<h5>Other Details</h5>
</div>
</div>
</div>
<div class="row pb-3 pt-3">
<div class="col-md mb-2">
<label>User</label>
<input type="text" class="form-control" placeholder={{username}} id="user" name="user">
</div>
<div class="col-md mb-2">
<label>Remarks</label>
<textarea type="text" class="form-control" placeholder="Remarks"></textarea>
</div>
</div>
<div class="row">
<div class="col">
<button class="btn btn-primary" type="add">Save</button>
</div>
</div>
</form>
I have a table to display and in which i'm creating two buttons inside a column and each has its modals to be open.
Button 1 - "Update"; its modal is "modaledit" - doesn't work
Button 2 - "Generic Tech Skills"; its modal is "modalgts" - works fine
What I don't understand is that, when I Place the "modaledit's" code before "modalgts's" code. It works fine. Can somebody please try to help in this regard?
<thead class="text-center">
<tr>
<th>Employee ID</th>
<th>Name</th>
<th>Experience</th>
<th>Manager</th>
<th>Team</th>
<th>General Action</th>
<th>Enter Score</th>
</tr>
</thead>
<tbody id="myTable" class="text-center">
{% for row in employees %}
<tr>
<td>{{row.employee_id}}</td>
<td>{{row.name}}</td>
<td>{{row.experience}}</td>
<td>{{row.manager}}</td>
<td>{{row.team}}</td>
<td>
Edit
Generic Tech Skills
</td>
<td>
</td>
</tr>
</tbody>
<div id="modalgts{{row.employee_id}}" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title text-dark"> Enter Generic Tech Skills Score </h4>
</div>
<div class="modal-body">
<form action="{{url_for('gts')}}" method="POST">
<div class="form-group">
<label>Employee ID</label>
<input type="Number" class="form-control " name="employee_id" value="{{row.employee_id}}" readonly>
</div>
<div class="form-group">
<label>Name</label>
<input type="text" class="form-control" name="name" value="{{row.name}}">
<div class="form-group">
<label>Experience</label>
<select type="text" class="form-control" name="experience" value="{{row.experience}}">
<option selected>{{row.experience}}</option>
<option>Less than 3 years</option>
<option>3 to 6 Years</option>
<option>6 to 9 years</option>
<option>More than 9 Years</option>
</select>
</div>
<div class="form-group">
<label>Manager</label>
<select type="text" class="form-control" name="manager" value="{{row.manager}}">
<option selected>{{row.manager}}</option>
<option>Ravindra</option>
<option>Subash</option>
<option>Subhandh</option>
<option>Amulya</option>
<option>Dinesh</option>
</select>
</div>
<div class="form-group">
<label>Team</label>
<select class="form-control" name="team" value="{{row.team}}">
<option selected>{{row.team}}</option>
<option>SAN Engineering</option>
<option>Cloud Engineering</option>
<option>Hypervisor Systems Engineering</option>
<option>Automation Engineering</option>
</select>
</div>
<div class="form-group">
<button class="btn btn-outline-primary" type="submit">Update</button>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Modal Edit Employee-->
<div id="modaledit{{row.employee_id}}" class="modal hide fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title text-dark"> Update Employee </h4>
</div>
<div class="modal-body">
<form action="{{url_for('update')}}" method="POST">
<div class="form-group">
<label>Employee ID</label>
<input type="Number" class="form-control " name="employee_id" value="{{row.employee_id}}" readonly>
</div>
<div class="form-group">
<label>Name</label>
<input type="text" class="form-control" name="name" value="{{row.name}}">
<div class="form-group">
<label>Experience</label>
<select type="text" class="form-control" name="experience" value="{{row.experience}}">
<option selected>{{row.experience}}</option>
<option>Less than 3 years</option>
<option>3 to 6 Years</option>
<option>6 to 9 years</option>
<option>More than 9 Years</option>
</select>
</div>
<div class="form-group">
<label>Manager</label>
<select type="text" class="form-control" name="manager" value="{{row.manager}}">
<option selected>{{row.manager}}</option>
<option>Ravindra</option>
<option>Subash</option>
<option>Subhandh</option>
<option>Amulya</option>
<option>Dinesh</option>
</select>
</div>
<div class="form-group">
<label>Team</label>
<select class="form-control" name="team" value="{{row.team}}">
<option selected>{{row.team}}</option>
<option>SAN Engineering</option>
<option>Cloud Engineering</option>
<option>Hypervisor Systems Engineering</option>
<option>Automation Engineering</option>
</select>
</div>
<div class="form-group">
<button class="btn btn-outline-primary" type="submit">Update</button>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
{% endfor %}
</table>
</div>
I am building an app using Flask and part of what I am currently working on is a registration form for new employees.
I am trying to get the registration forms to send to a SQL server table but I get 42000 pyodbc.ProgrammingError when I hit the submit button.
Here is the debugger page - Image
Here is the route and function in app.py
#app.route('/add-employee', methods=['GET', 'POST'])
def add_employee():
if request.method == "POST":
employee_id = request.form['employee_id']
first_name = request.form['first_name'],
surname = request.form['surname'],
job_title = request.form['job_title']
location = request.form['location'],
reports_to = request.form['reports_to'],
business_unit = request.form['business_unit'],
address_1 = request.form['address_1'],
address_2 = request.form['address_2'],
address_3 = request.form['address_3'],
eircode = request.form['eircode'],
mobile_number = request.form['mobile_number'],
alt_email_address = request.form['alt_email_address'],
pps_number = request.form['pps_number'],
part_orfulltime = request.form['part_orfulltime']
insert_query = '''INSERT INTO hr_employee_data (employee_id, first_name, surname, address_1, address_2, address_3, eircode, mobile_number, pps_number, alt_email_address, job_title, location, reports_to, business_unit, part_orfulltime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);'''
cursor = cnxn.cursor()
cursor.execute(insert_query, (employee_id, first_name, surname, job_title, location, reports_to, business_unit, part_orfulltime, address_1 , address_2, address_3, eircode, mobile_number, alt_email_address, pps_number))
cnxn.commit()
return redirect (url_for('hr_homepage'))
return render_template("add-employee.html")
And the HTML form is here -
<form class="form-detail" action="{{ url_for('add_employee') }}" method="POST" id="myform">
<div class="form-left">
<h2>General Infomation</h2>
<div class="form-group">
<div class="form-row form-row-1">
<input type="text" name="first_name" id="first_name" class="input-text" placeholder="First Name" required>
</div>
<div class="form-row form-row-2">
<input type="text" name="surname" id="surname" class="input-text" placeholder="Surname" required>
</div>
<div class="form-row form-row-2">
<input type="text" name="job_title" id="job_title" class="input-text" placeholder="Job Title" required>
</div>
</div>
<div class="form-row">
<div class="form-row form-row-5">
<input type="text" name="pps_number" id="pps_number" class="input-text" placeholder="PPS Number" required>
</div>
<div class="form-row form-row-5">
<input type="text" name="employee_id" id="employee_id" class="input-text" placeholder="Employee ID" required>
</div>
</div>
<div class="form-row">
<i class="fas fa-warehouse"></i>
<select name="location">
<option class="option" value="location" selected disabled>Select Location</option>
<option class="option" value="Ballyhaunis">Ballyhaunis</option>
<option class="option" value="Kiltimagh">Kiltimagh</option>
<option class="option" value="Dublin">Dublin</option>
<option class="option" value="Store">Store</option>
<option class="option" value="On The Road">On The Road</option>
<option class="option" value="Home">Home</option>
</select>
<span class="select-btn">
<i class="fas fa-chevron-down"></i>
</span>
</div>
<div class="form-row">
<i class="fas fa-user-tie"></i>
<select name="reports_to">
<option value="position" selected disabled>Select Line Manager</option>
<option value="Manager A">Manager A</option>
<option value="Manager B">Manager B</option>
<option value="Manager C">Manager C</option>
<option value="Manager D">Manager D</option>
<option value="Manager E">Manager E</option>
<option value="Manager F">Manager F</option>
</select>
<span class="select-btn">
<i class="fas fa-chevron-down"></i>
</span>
</div>
<div class="form-group">
<div class="form-row form-row-5">
<select name="business_unit">
<option value="department" selected disabled>Select Department</option>
<option value="IT">IT</option>
<option value="Warehouse">Warehouse</option>
<option value="Purchasing">Purchasing</option>
<option value="Sales">Sales</option>
<option value="Maintenance">Maintenance</option>
<option value="Driver">Driver</option>
<option value="Management">Management</option>
</select>
<span class="select-btn">
<i class="fas fa-chevron-down"></i>
</span>
</div>
<div class="form-row form-row-5">
<select name="part_orfulltime">
<option value="time" selected disabled>Part/Full Time</option>
<option value="Part">Part Time</option>
<option value="Full">Full Time</option>
</select>
<span class="select-btn">
<i class="fas fa-chevron-down"></i>
</span>
</div>
</div>
</div>
<div class="form-right">
<h2>Contact Details</h2>
<div class="form-row-2">
<input type="text" name="address_1" class="input-text" id="address_1" placeholder="Street" required>
</div>
<div class="form-row-2">
<input type="text" name="address_2" class="input-text" id="address_2" placeholder="Town" required>
</div>
<div class="form-row-2">
<input type="text" name="address_3" class="input-text" id="address_3" placeholder="County" required>
</div>
<div class="form-row-2">
<input type="text" name="eircode" class="input-text" id="eircode" placeholder="Eircode" required>
</div>
<div class="form-group">
<div class="form-row form-row-2">
<input type="text" name="mobile_number" class="mobile_number" id="mobile_number" placeholder="Phone Number" required>
</div>
</div>
<div class="form-row">
<input type="text" name="alt_email_address" id="alt_email_address" class="input-text" required pattern="[^#]+#[^#]+.[a-zA-Z]{2,6}" placeholder="External Email">
</div>
<div class="form-row-last">
<input type="submit" name="register" class="register" value="Next">
</div>
</div>
</form>
The debugger says that each field is invalid data types but that shouldn't be the case as I have checked all those on MSSMS and nothing seems to be out of place?
I know I had one or two field names that needed to be fixed but I got all those too so out of ideas as to what might be wrong.
I looked for answers on other questions such as these -
Python Flask - Receive data from form with multiple textboxes
Recommendations for handling HTML form data using PHP - and may Python?
Python form drop down options populated by sql
However those questions don't seem to have what I am looking for. Can you see where I am going wrong?
Any advice (or previously posted solutions) would be mighty, thank you!
(Edit) P.S. Forgot to add in, if I change cursor to executemany, I get TypeError: ('Params must be in a list, tuple, or Row', 'HY000') as an error.