如何在ModelFormMixin中

时间:2017-01-19 13:02:26

标签: python django django-views

DetailStory子类DetailView和ModelFormMixin因此在最后呈现某个故事的DetailView和一个表单。但是,在填写表单并提交数据时,数据将保存在数据库中,但仍显示在表单上(除了现在显示在DetailView上的数据)。提交后如何呈现空表格? (这是代码示例)

class DetailStory(DetailView, ModelFormMixin):
    model = Story
    template_name = 'stories/detail_story.html'
    context_object_name = 'detail'
    form_class = CommentForm

    def get(self, request, *args, **kwargs):
        self.object = None
        self.form = self.get_form(self.form_class)

        return DetailView.get(self, request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        self.object = None
        self.form = self.get_form(self.form_class)

        if self.form.is_valid():
            obj = self.form.save(commit=False)
            obj.user = self.request.user
            obj.memoir = self.get_object()
            self.object = obj.save()

        return self.get(request, *args, **kwargs)

    def get_object(self):
        item_id = crypt.decode(self.kwargs['story_id'])[0]
        obj = get_object_or_404(Story, Q(privacy='public') | Q(user_id=self.request.user.id), pk=item_id)

        return obj

1 个答案:

答案 0 :(得分:1)

get_form根据the docs

使用请求数据构建表单
  

如果请求是POST或PUT,还将提供请求数据(request.POST和request.FILES)。

因此,只是不要让你的帖子功能返回到get,只需将其重定向到您需要的位置,或做任何不同的事情,将其指向get函数。

return redirect('mynamespace:story_detail', story_id=self.object.pk)

您可能希望阅读this answer以获取在申请时应考虑的技术细节列表。特别是,

  如果POST成功,

在POST后重定向,以防止刷新再次提交。