Home > Blockchain >  Error: Django model form data not being saved in the database
Error: Django model form data not being saved in the database

Time:07-10

I'm trying to create a blog model but the form data is not being saved in the database after submitting the form.
views.py

def postsform(request):
    if request.method == "POST":
        form = BlogForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('blog')
        else:
            form = BlogForm()
            messages.warning(request, "Opps! Something went wrong.")
            return render(request, 'blog/postform.html', {'form':form})
    else:
        form = BlogForm()
        return render(request, 'blog/postform.html', {'form':form})

forms.py

from django_summernote.widgets import SummernoteWidget

class BlogForm(ModelForm):
    class Meta:
        model = BlogPost
        widgets = {
            'blog': SummernoteWidget(),
        }
        fields = ['title', 'featureImg', 'blog', 'meta_description', 'keyword', 'author']

models.py

class BlogPost(models.Model):
    title = models.CharField(max_length=999)
    featureImg = ProcessedImageField(upload_to = 'blog/', format='JPEG',options={'quality':60}, null=True)
    slug = models.CharField(max_length=999, blank=True,null= True)
    blog = models.TextField()
    meta_description = models.TextField()
    keyword = models.TextField()
    author = models.CharField(max_length=255)
    created_on = models.DateField(auto_now_add=True)
    updated_on = models.DateField(auto_now=True)

    def save(self, *args, **kwargs):
        if BlogPost.objects.filter(title=self.title).exists():
            extra = str(randint(1, 1000000))
            self.slug = slugify(self.title)   "-"   extra
        else:
            self.slug = slugify(self.title)
        super(BlogPost, self).save(*args, **kwargs)

html

<form method="POST">
        {% csrf_token %}
        {{form.as_p}}
        <button type="submit">Publish</button>
    </form>

I've tried finding where I made the mistake but couldn't find it. After submitting the form the warning message pops up and the form doesn't get submitted.

CodePudding user response:

You should not construct a new form, since then it will not render the errors. Likely you did not pass request.FILES, and the enctype="…" [mdn-doc] is also missing in the <form> tag:

def postsform(request):
    if request.method == 'POST':
        form = BlogForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('blog')
        else:
            # no new BlogForm
            messages.warning(request, 'Oops! Something went wrong.')
    else:
        form = BlogForm()
    return render(request, 'blog/postform.html', {'form': form})

and in the HTML form:

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit">Publish</button>
</form>
  • Related