Как мне сделать так, чтобы форма автоматически идентифицировала пользователя, который вошел в систему как автор
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