Как мне сделать так, чтобы форма автоматически идентифицировала пользователя, который вошел в систему как автор

class ArticleCreateView(CreateView):
   model=Post
   form_class=PostForm
   template_name='add_post.html'


from operator import mod

from turtle import title from django import forms from .models import Post

class PostForm(forms.ModelForm): class Meta: model=Post fields=['title','body','author','category']

Формы Django позволяют задавать начальные значения, именно так вы можете передать в представлении текущего пользователя. Вы не сможете сделать это непосредственно в вашем файле forms.py, потому что он не получает запрос в качестве аргумента.

form = PostForm(initial={'author': self.request.user})

https://docs.djangoproject.com/en/4.0/ref/forms/api/#initial-form-values

Вы можете переопределить метод form_valid вашего CreateView. Возможно, вы не захотите включать автора в форму.

class ArticleCreateView(CreateView):
   model = Post
   form_class = PostForm
   template_name = 'add_post.html'

   def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)


class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'body', 'category']

Вы также можете переопределить метод get_form_kwargs:

class ArticleCreateView(CreateView):
   model = Post
   form_class = PostForm
   template_name = 'add_post.html'

   def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs.update({'initial': {'author': self.request.user}})
        return kwargs
Вернуться на верх