Reputation: 64
Having issues with the first form validating and posting. The second form, form2 works fine. The view code is the same structure so curious as what is causing the issue.
.is_valid() by default should validate the fields. What am I missing?
# views.py
def create(request):
if request.method == 'POST':
form = CreateForm(request.POST)
form2 = CreateTimeForm(request.POST)
if form.is_valid():
form.save()
return redirect('organizer-create')
if form2.is_valid():
form2.save()
return redirect('organizer-create')
else:
form = CreateForm()
form2 = CreateTimeForm()
context = {
'form': form,
'form2': form2,
}
return render(request, 'organizer/create.html', context)
# forms.py
class CreateForm(ModelForm):
class Meta:
model = Event
fields = ['title', 'date',]
# models.py
class Event(models.Model):
title = models.CharField(max_length=50)
date = models.DateField()
datetimecreated = models.DateTimeField(auto_now_add=True)
def get_absolute_url(self):
return reverse('organizer-admin')
def __str__(self):
return str(self.date) + ", " + self.title
Edit 2: Below is my template. Could a database issue cause the data not to post? How would I trouble shoot this?
# create.html template
{% block content %}
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Event Creation</legend>
{{ form.as_p }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Create</button>
</div>
</form>
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Add New Time Block</legend>
{{ form2.as_p }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Create</button>
</div>
</form>
{% endblock content %}
Upvotes: 0
Views: 33
Reputation: 128
Change your views.py file as below:
def create(request):
if request.method == 'POST':
form = CreateForm(request.POST)
form2 = CreateTimeForm(request.POST)
if form.is_valid() and form2.is_valid:
form.save()
form2.save()
return redirect('organizer-create')
else:
form = CreateForm()
form2 = CreateTimeForm()
context = {
'form': form,
'form2': form2,
}
return render(request, 'organizer/create.html', context)
Now The problem is, when the compiler compile your first if-statement that is:
if form.is_valid():
form.save()
return redirect('organizer-create')
will look and think Oh' that's correct and execute your if-statement. And then it will redirect 'organizer-create' SUCCESSFULLY. That is:
return redirect('organizer-create')
but Don't move your next if-statement.
Upvotes: 1