Как мне передать request.user в мою форму?

Я пытаюсь создать форму posts, которая позволяет пользователю создавать посты на моем сайте. Я застрял на том, как передать request.user в поля "автор" и "участники". Кто-нибудь может помочь?

Вот мое мнение:

def home(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('')

Моя модель:

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    body = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
    participants = models.ManyToManyField(User, related_name="participants", blank=True)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-created"]

    def __str__(self):
        return self.body

И моя форма:

from django.forms import ModelForm
from .models import Post

class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = '__all__'

У меня есть пример с представлениями на основе классов, где это легко осуществить.

class PostCreateView(CreateView):
    template_name = 'Post/article_create.html'
    form_class = ArticleModelForm
    queryset = Article.objects.all()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form_journal'] = JournalModelForm
        return context

    def dispatch(self, request, *args, **kwargs):
        if request.method == 'POST':
            want_redirect = request.POST.get('want_redirect')
            if not want_redirect:
                self.success_url = reverse_lazy('article:article-create')
        return super(ArticleCreateView, self).dispatch(request, *args, **kwargs)

    def form_valid(self, form):
        form.instance.user = self.request.user //I think this is what you are trying to do
        return super().form_valid(form)

Для author можно использовать это.

def home(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        form.author = request.user
        if form.is_valid():
            form.save()
            return redirect('')

Для participants вы можете подождать, пока будет создан новый Post, а затем добавить User

if form.is_valid():
   new_post = form.save()
   new_post.participants.add(user)
Вернуться на верх