Сохранение 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