boyenec
boyenec

Reputation: 1617

Django not saving forms data in database

I am getting forms success message in my html template but forms data not saving. here is my code:

views.py:

 class BlogDetailsAccount(FormMixin,DetailView):
          model = Blog
          template_name = 'blog/my-account-blog-details.html'
          form_class = CommentFrom
         
          def get_success_url(self):
            return reverse('blog:my-account-blog-details', kwargs={'slug': self.object.slug})
      
          def get_context_data(self, **kwargs):
              #my context data........
              
              return data
          
          def post(self, request, *args, **kwargs):
            self.object = self.get_object()
            form = self.get_form()
            if form.is_valid():
                messages.add_message(self.request, messages.INFO, 'Your Comment pending for admin approval')
                return self.form_valid(form)
            else:
                messages.add_message(self.request, messages.INFO, 'Somethings Wrong. Please try again')
                return self.form_invalid(form)
    
          def form_valid(self, form):
            return super(BlogDetailsAccount, self).form_valid(form) 

my models.py:

class BlogComment(models.model):
     .......#my models fields.... 
     .............

post_save.connect(BlogComment.user_comment, sender=BlogComment)  #using signals 

Upvotes: 1

Views: 167

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476604

A FormMixin does not save the data to the database. In case you need to save the form, you should save it in the form_valid method:

A form_mixin does not save the data to the database.

class BlogDetailsAccount(FormMixin,DetailView):
    # …

    def post(self, request, *args, **kwargs):
        form = self.get_form()  # ← first create a form
        self.object = self.get_object()  # ← then specify the object
        if form.is_valid():
            messages.add_message(self.request, messages.INFO, 'Your Comment pending for admin approval')
            return self.form_valid(form)
        else:
            messages.add_message(self.request, messages.INFO, 'Somethings Wrong. Please try again')
            return self.form_invalid(form)

    def form_valid(self, form):
        form.save()
        return super().form_valid(form)

You should also likely fill in relevant data like the post where the comment appears and

Upvotes: 2

Related Questions