Iskender Berdiev
Iskender Berdiev

Reputation: 195

When creating django model, it posts the data, but does not save it in database

I can create model objects through admin panel. But I want it to be created on website. The code below allows me to enter values of a model, and when I submit it, it redirects to the written url, which happens after form.save. This is the message from server "POST /taskcreate HTTP/1.1" 302 0. But there is no changes in database. How to solve this issue? Any thoughts... Thanks

models.py

class Task(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=1000)
    pub_date = models.DateTimeField('date_published', auto_now_add = True)
    cost = models.IntegerField()
    def __str__(self):
        return '%s' % (self.name)

forms.py

class TaskCreateForm(forms.ModelForm):
    class Meta:
        model = Task
        fields = ('name', 'description', 'cost')

views.py

def TaskCreateView(request):
    if request.method == 'POST':
        form = TaskCreateForm(request.POST)
        if form.is_valid():
            form.save
            return redirect('home')
    else:
        form = TaskCreateForm()
    return render(request, 'employer/create_task.html')

Upvotes: 0

Views: 156

Answers (2)

Rarblack
Rarblack

Reputation: 4664

When you use ModelForm you just need to write form.save() method right after if is_valid() if case. In your case, you are missing curly brackets after save.

def TaskCreateView(request):
    if request.method == 'POST':
        form = TaskCreateForm(request.POST)
        if form.is_valid():
            form.save() # here you were missing curly brackets
            return redirect('home')
    else:
        form = TaskCreateForm()
    return render(request, 'employer/create_task.html')

Upvotes: 0

Daniel Roseman
Daniel Roseman

Reputation: 599490

You didn't actually call the save method.

if form.is_valid():
    form.save()
    return redirect('home')

Upvotes: 1

Related Questions