Go к вновь созданному сообщению - PullRequest
1 голос
/ 06 мая 2020

После того, как пользователь создал действительное сообщение и нажал «Опубликовать», я хочу, чтобы он перешел к действующему сообщению. Я провел тест с return redirect('post-detail', 18). В тот момент, когда была создана действительная публикация, загружается сообщение с ID 18.

Я пытаюсь получить идентификатор только что созданного сообщения. Я пытаюсь написать return redirect('post-detail', id of newly created post)

Поскольку эта строка работает form.instance.author = self.request.user, я пробовал form.instance.id, но не получил желаемых результатов.

Есть какие-нибудь предложения?

enter image description here

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'content']

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

    return redirect('post-detail', 18)

    #print (form.instance.id)
    return redirect('post-detail', form.instance.id)

1 Ответ

1 голос
/ 06 мая 2020

Вы не сохранили форму, следовательно, это означает, что на тот момент у объекта еще нет первичного ключа. Обычно форма сохраняется в методе basi c form_valid.

Кроме того, вам, вероятно, лучше переопределить get_success_url, поскольку это место, где вы должны «вычислить» URL-адрес для перенаправления:

from django.urls import reverse

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'content']

    def get_success_url(self):
        return <b>reverse('post-detail', args=[self.object.pk])

    def form_valid(self, form):
        form.instance.author = self.request.user
        # will <i>save</i> the form and <i>redirect</i> to the success_url
        return super().form_valid(form)</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...