我有一个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)
答案 0 :(得分:1)
您可以尝试这样:
首先在表单中添加两个具有不同名称(即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')
可以说您的Blog模型具有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()