slashdotblake
slashdotblake

Reputation: 64

Model Form Fails to Validate and Post

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

Answers (1)

Usama Nadeem
Usama Nadeem

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

Related Questions