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, вы использовали : вместо =.

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