Автоматически заполняемые поля формы django

Я работаю над своим блогом и добавил раздел комментариев, теперь я хочу автоматически заполнить два поля в формах, но получаю ошибку NOT NULL constraint failed: MainSite_comment.user_id.
Models.py

class Comment(models.Model):
    comment_text = models.TextField(("comment_text"))
    user = models.ForeignKey("account.User", related_name=("comment_user"), on_delete=models.CASCADE)
    #post = models.ForeignKey("Post", related_name=("comment_post"), on_delete=models.CASCADE)
    parent = models.ForeignKey('self',related_name=("replies"), on_delete = models.CASCADE , blank= True ,null=True)
    timestamp = models.DateTimeField(("Comment Timestamp"), auto_now=False, auto_now_add=True)

    def __str__(self):
        return self.user.username

Forms.py

class CommentForm(ModelForm):
    class Meta:
        model = Comment
        fields =['comment_text']

        labels ={
            'comment_text':'',
        }

        widgets ={
            'comment_text': forms.Textarea(attrs = {'class':'form-control','rows':'5','cols':'50',
                'style' : 'background: #fff;',
                'placeholder':'Write a comment....'}),
            
        }

Views.py

class PostDetailView(FormMixin,DetailView):
    model = Post
    form_class = CommentForm
    template_name = 'MainSite/blogpost.html'
    
    def form_valid(self, form):
        form.instance.user_id = self.request.user.id
        return super().form_valid(form)

    def post(self,request,slug):
        print(request.user.id)
        if request.method == 'POST':
            form = CommentForm(request.POST)
            if form.is_valid():
                form.save()
                messages.success(request,"Comment added successfully")

    success_url = reverse_lazy('home')

Я хочу автоматически заполнять поле пользователя и поле поста (я изменю поле поста в модели позже). Я получаю ошибку при автоматическом заполнении поля пользователя в модели. Сейчас я использую slug в урлах, чтобы показать пост. Я не знаю, как работает эта form_valid(), что она возвращает и что это за instance

Спасибо за помощь и любой совет будет полезен.

Вы должны вызвать метод form_valid, иначе установка пользователя там не имеет смысла, поэтому:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy

class PostDetailView(LoginRequiredMixin, FormMixin, DetailView):
    model = Post
    form_class = CommentForm
    template_name = 'MainSite/blogpost.html'
    success_url = reverse_lazy('home')
    
    def form_valid(self, form):
        form.instance.user_id = self.request.user.id
        form.save()
        messages.success(self.request, 'Comment added successfully')
        return super().form_valid(form)

    def post(self, request, slug):
        form = self.get_form()
        self.object = self.get_object()
        if form.is_valid():
            self.form_valid(form)
        else:
            self.form_invalid(form)
Вернуться на верх