KG997
KG997

Reputation: 3

Django 2.0 Form is not saving data to database

so I have a very simple blog app and I'm trying to figure out why the data entered in the form doesn't save to the database and it doesn't redirect me to my index page.

forms.py

from django import forms

class NewBlog(forms.Form):
  blogger = forms.CharField(max_length=20, widget=forms.TextInput(attrs=  
  {'placeholder' : 'Name'}))
  text = forms.CharField(widget=forms.Textarea(attrs={'placeholder' : 
  'Text'}))

new_blog.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>New Blog</title>
</head>
<body>
   <form action="{% url 'new_blog' %}" method="POST">
   {% csrf_token %}
   <h2>Write your blog here:</h2>
   {{ form }}
   <br>
   <input type="submit" value="Submit">
</form>
</body>
</html>

views.py

from django.shortcuts import render, redirect
from .models import BlogPost
from .forms import NewBlog

def index(request):
  blogs = BlogPost.objects.all()
  context = {'blogs' : blogs}
  return render(request, 'blog/index.html', context)

def newBlog(request):
   if request == 'POST':
     form = NewBlog(request.POST)
   if form.is_valid():
     blogger = form.cleaned_data['blogger'] 
     text = form.cleaned_data['text'] 
     new_blog = BlogPost(blogger = blogger, text = text)
     new_blog.save()
     return redirect('index')
   else:
     form = NewBlog()
  context = {'form' : form}
  return render(request, 'blog/new_blog.html', context)

Upvotes: 0

Views: 129

Answers (2)

Atcrank
Atcrank

Reputation: 479

I think the problem is likely to be the first line of your view.

if request == 'POST':

should be:

if request.method == 'POST':

Upvotes: 1

Wariored
Wariored

Reputation: 1343

To save an Object into database instead of

new_blog = BlogPost(blogger = blogger, text = text)
new_blog.save()

use the best way:

BlogPost.objects.create(blogger = blogger, text = text)

It will be automatically saved

Upvotes: 0

Related Questions