Сохранение request.user в Django Form с помощью метода post в представлении на основе класса

Я хочу заполнить поле пользователя с помощью request.user. Но мне нужно использовать CBV. Я не слишком хорошо разбираюсь в CBV. Я пытался создать что-то подобное в views.py, но не совсем верным способом

models.py

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils.translation import gettext_lazy as _

class Entry(models.Model):
    title = models.TextField(max_length=30, help_text=_("Enter your title"), verbose_name=_("Title"))
    content = models.TextField(max_length=500, help_text=_("Enter your content"), verbose_name=_("Content"))
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Entry' 
        verbose_name_plural = 'Entries' 

    def get_absolute_url(self):
        return reverse("model_detail", kwargs={"pk": self.pk})
    

views.py

from django.views.generic import ListView
from .models import Entry
from .forms import EntryForm

class EntryListViev(ListView):
    model = Entry 
    context_object_name = 'object_list'
    template_name = 'home.html'

    def form_add_the_user(request, form):
        form.user = request.user
        return super().form_add_the_user(form)

forms.py

from django import forms
from .models import Entry

class EntryForm(forms.ModelForm):
    title = forms.CharField(max_length=30, help_text=_("Enter your title"))
    content = forms.CharField(max_length=500, help_text=_("Enter your content"))
    class Meta:
        model = Entry
        
        fields = ['title', 'content']

home.html

<form method="POST">
    {% csrf_token %}
    {{form}}
<button type="submit">Submit</button>
</form>

{% for post in object_list  %}
    {{post.title}}
{% endfor %}

для этого вам нужно использовать CreateView вместо ListView.

После этого вы можете добавить эту функцию к вашему CBV:

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

Вам также понадобится это после определения модели в CBV:

form_class=EntryForm
Вернуться на верх