Hi, I am trying to save data from: 3 forms --> through 1 view --> to 3 models. Within the View I have 3 if statements (i.e. if form1.is_valid(), if form2.is_valid(), etc). When these act alone (i.e. the other if statements are commented out), data can be save to the models. But if 2 or 3 if statements are being used I get errors, mainly Document is empty.
How the process is working: a url is entered in the form --> a class is used within the View to pull a table from the URL as a list of tuples --> those tuples are inserted into the models.
To reiterate, theses forms work individually but not all together. Any insight to what is happening here would be great.
My thoughts are that it is to do with the if statements not written correctly but I’m fairly new to Django so it may be my misunderstanding in how these work. Thanks, please see code below:
HTML:
{% extends 'base.html' %}
<h1>Event Data</h1>
{% block head %}
<title>Event Data</title>
{% endblock %}
{% block body %}
<div class="container">
<h1>Event Data</h1>
<form method="post">
{% csrf_token %}
{{ form1.as_p }}
<button type="submit">Submit</button>
</form>
<form method="post">
{% csrf_token %}
{{ form2.as_p }}
<button type="submit">Submit</button>
</form>
<form method="post">
{% csrf_token %}
{{ form3.as_p }}
<button type="submit">Submit</button>
</form>
</div>
{% endblock %}
FORMS:
class NextEventDetailsForm(forms.Form):
url_event = forms.URLField(required=False, label='Next Event Details:')
class CurrentEventForm(forms.Form):
url_card = forms.URLField(required=False, label='Current Event Details:')
class ResultsForm(forms.Form):
url_res = forms.URLField(required=False, label='Past Results:')
VIEW:
class EventStatsView(TemplateView):
template_name = 'accounts/page.html'
def get(self, request):
form1 = NextEventDetailsForm(prefix='form1')
form2 = CurrentEventForm(prefix='form2')
form3 = ResultsForm(prefix='form3')
return render(request, self.template_name, {
'form1': form1,
'form2': form2,
'form3': form3,
})
def post(self, request):
dbase = 'db'
dbuser = 'user'
event_table = 'event_table'
current_table = 'current_table'
res_table = 'results_table'
# For SQL insert and Upsert
event_headers = ' column headers here'
current_headers = ' column headers here'
update_current = ' update column headers here'
res_headers = ' column headers here'
update_res = ' column headers here'
form1 = NextEventDetailsForm(request.POST, prefix='form1')
form2 = CurrentEventForm(request.POST, prefix='form2')
form3 = ResultsForm(request.POST, prefix='form3')
if form1.is_valid():
post = form1.cleaned_data
url_event = post.get('url_event')
# This class converts data from URL to a list of tuples
df = Event(url_event)
df = df.event_details()
conn = psycopg2.connect("host=localhost dbname=" + dbase + " user=" + dbuser)
cur = conn.cursor()
for event in df:
insert_query = "INSERT INTO " + event_table + event_headers + " VALUES {};".format(event)
insert_query = insert_query.replace('"', "'")
print(insert_query)
cur.execute(insert_query)
conn.commit()
if form2.is_valid():
post = form2.cleaned_data
url_card = post.get('url_card')
df = Event(url_card)
df = df.fight_card()
conn = psycopg2.connect("host=localhost dbname=" + dbase + " user=" + dbuser)
cur = conn.cursor()
for fight in df:
insert_query = "INSERT INTO " + current_table + current_headers + " VALUES {} ".format(fight)
insert_query = insert_query.replace('"', "'")
update_query = 'ON CONFLICT(id) DO UPDATE SET ' + update_current
insert_query = insert_query + update_query
print(insert_query)
cur.execute(insert_query)
conn.commit()
if form3.is_valid():
post = form3.cleaned_data
url_res = post.get('url_res')
df = resultEvent(url_res)
df = df.fight_results()
conn = psycopg2.connect("host=localhost dbname=" + dbase + " user=" + dbuser)
cur = conn.cursor()
for result in df:
insert_query = "INSERT INTO " + res_table + res_headers + " VALUES {} ".format(result)
insert_query = insert_query.replace('"', "'")
update_query = 'ON CONFLICT(fight_id) DO UPDATE SET ' + update_res
insert_query = insert_query + update_query
print(insert_query)
cur.execute(insert_query)
conn.commit()
args = {
'form1': form1, 'form2': form2, 'form3': form3
}
return render(request, self.template_name, args)