Django form_valid не передает параметры в CreateView
В моем проекте django я пытаюсь создать страницу 'submit post' с помощью CreateView. Она работает, но с выпадающим меню для автора поста. Я бы хотел, чтобы автор автоматически добавлялся к посту.
Согласно (документации)[https://docs.djangoproject.com/en/4.1/topics/class-based-views/generic-editing/], я должен использовать метод form_valid для добавления автора в форму. Это не работает, даже если это скопировано прямо из документации.
Я попробовал добавить 'author'
к полям в классе PostCreate, и это только добавляет выпадающее окно автора к форме.
Views.py:
class PostCreate(LoginRequiredMixin, CreateView):
model = Post
fields = ['image', 'description']
success_url = '/'
template_name: 'post_form.html'
def form_valid(self, form):
self.author = self.request.user
return super().form_valid(form)
Замена на self.author = self.request.user.pk
тоже не работает.
Models.py:
class Post(models.Model):
image = models.ImageField()
description = models.TextField(null=True )
author = models.ForeignKey(User, on_delete=models.CASCADE)
Когда я смотрю на отладочную ошибку, я вижу, что параметр author не передан, что приводит к NOT NULL constraint failed
.
Запишите form.instance.author=self.request.user
как form
содержит все экземпляры после валидации формы, так:
class PostCreate(LoginRequiredMixin, CreateView): model = Post fields = ['image', 'description'] success_url = '/' template_name='post_form.html' def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form)
.
Note
: представления на основе классов требуют, чтобы их имя записывалось как имя модели в качестве префикса и фактическое имя представления в качестве суффикса, поэтому вы можете записать его вPostCreateView
из.PostCreate
Редактирование:
Я вижу большую ошибку, это должно быть template_name='post_form.html
, вы использовали :
вместо =
.