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
答案 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后重定向,以防止刷新再次提交。