从表单输入重定向到两个不同的视图
redirecting to two different view from a form input
我有一个 PostForm 模型表单可以为我的博客应用程序创建 posts。现在,用户在填写 post 表单后有两个选择 he/she 可以立即发布,也可以将其放入草稿以供稍后发布。发布后,用户将被重定向到 post 的详细信息视图,但起草后,它将重定向到用户的草稿列表视图。我不想为草稿 post 创建详细视图。
但我无法实现如何使用两个不同的提交选项(发布和草稿)将用户重定向到两个不同的视图
在表格中。
创建视图
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)
你可以这样试试:
首先在您的表单中添加两个不同的按钮,它们具有不同的名称(即 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()
我有一个 PostForm 模型表单可以为我的博客应用程序创建 posts。现在,用户在填写 post 表单后有两个选择 he/she 可以立即发布,也可以将其放入草稿以供稍后发布。发布后,用户将被重定向到 post 的详细信息视图,但起草后,它将重定向到用户的草稿列表视图。我不想为草稿 post 创建详细视图。
但我无法实现如何使用两个不同的提交选项(发布和草稿)将用户重定向到两个不同的视图 在表格中。
创建视图
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)
你可以这样试试:
首先在您的表单中添加两个不同的按钮,它们具有不同的名称(即 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()