перенаправление на два разных вида из формы ввода - PullRequest
0 голосов
/ 25 июня 2019

У меня есть форма модели PostForm для создания постов для моего блога. Теперь у пользователя есть два варианта после заполнения формы сообщения, он / она может опубликовать ее немедленно или может добавить в черновики для последующей публикации. после публикации пользователь будет перенаправлен в подробный вид этого поста, но после его создания он будет перенаправлен в черновой список пользователя. Я не хочу создавать подробный вид для черновиков сообщений.

Но я не могу реализовать, как я могу перенаправить пользователя в два разных представления с двумя разными вариантами отправки (публикация и черновик) в форме.

создать вид

    model = Post
    template_name = 'blog/post_form.html'
    form_class = PostForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = 'Create'
        return context

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

post_form.html

    model = Post
    template_name = 'blog/post_form.html'
    form_class = PostForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = 'Create'
        return context

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

1 Ответ

1 голос
/ 25 июня 2019

Вы можете попробовать вот так:

Сначала добавьте в форму две разные кнопки с разными именами (например, draft и publish):

<form action="" method="post">
    {{ form }}
    <input type="submit" name="draft" value="Draft" />
    <input type="submit" name="publish" value="Publish" />
</form>

Затем переопределите метод get_success_url() внутри представления создания:

def get_success_url(self):
   if 'draft' in self.request.POST:
       return reverse('draft-url')
   return reverse('publish-url')

Обновление

Допустим, в вашей модели блога есть метод get_absolute_url, который перенаправляет на опубликованный блог. Тогда вы можете использовать его так:

# model
class Blog(models.Model):
   ...
   def get_absolute_url(self):
       return reverse('blog:publish_post', slug=self.slug)

# view
def get_success_url(self):
   if 'draft' in self.request.POST:
       return redirect('draft-url')
   return super().get_success_url()
...