Когда мне нужно удалить `super (PostUpdateView, self) .form_valid (form)` из `form-valid`? - PullRequest
2 голосов
/ 07 мая 2019

Нет URL для перенаправления. Либо укажите URL, либо определите Метод get_absolute_url в модели.

У меня есть следующий класс, в котором я явно определил метод перенаправления, который должен предотвратить эту ошибку.

@method_decorator(login_required, name='dispatch')
class PostUpdateView(UpdateView):
    model = Post
    fields = ('message',)
    template_name = 'board/edit_post.html'
    pk_url_kwarg = 'post_pk'
    context_object_name = 'post'


    def get_queryset(self):
        queryset = super().get_queryset()
        # ! queryset.objects.filter
        return queryset.filter(created_by=self.request.user)

    def form_valid(self, form):
        post = form.save(commit=False)
        post.updated_by = self.request.user 
        post.updated_at = timezone.now() 
        post.save()
        super(PostUpdateView, self).form_valid(form)

        return redirect('board:view_topic', pk=post.topic.board.pk, topic_pk=post.topic.pk)

Я тогда удалил super(PostUpdateView, self).form_valid(form) отсюда и все работало нормально. Не знаете, почему так должно быть?

Аналогично функции ниже, когда я всегда вызываю form_valid, я всегда добавляю super().form_valid(), почему я должен удалить ее выше, чтобы она работала.

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

Надеюсь, ты мне поможешь, спасибо.

1 Ответ

1 голос
/ 07 мая 2019

Когда вы звоните super(PostUpdateView, self).form_valid(form), представление обновления сохраняет форму и пытается перенаправить на успешный URL-адрес представления .

В этом случае Django не знает, какой URL-адресперенаправить на.Как показывают сообщения об ошибках, вы можете решить проблему, установив success_url или get_success_url в представлении или добавив метод get_absolute_url в модель.

Однако, поскольку вы уже сохраняете объекти возвращая ответ перенаправления, вызов super(PostUpdateView, self).form_valid(form) просто повторяет код, который вы уже написали.Это хорошо, чтобы удалить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...