用户单击一个按钮,通过POST请求将其转到新表单,该请求包含一个pk。这用于使用一些额外数据预填充新表单。此时没有数据保存到数据库。我不想在URL上传递此pk,因此无法使用GET调用视图。
我尝试在CreateView中覆盖get_initial()
方法,但这似乎只是在GET请求后调用。
我也试过def post()
,这让我可以轻松访问这些字段,但这意味着我必须编写更多代码来处理表单验证等(由vanilla CreateView自动处理)。
那么,当两个请求都通过POST发送时,处理表单呈现和保存的最佳方法是什么?
答案 0 :(得分:0)
我要做什么:
def post(self, request, **kwargs):
# Replace 'list_of_pets' with stuff that you'll definitely have in the first request
if 'list_of_pets' in request.POST:
# Provide initial data for form in get()
return self.get(request, **kwargs)
else:
# Provides automatic form validation
return super().post(request, **kwargs)
在get()
方法中,您可以设置初始数据和诸如此类的东西。你也可以使用一个完全独立的方法,但是覆盖get()
会给你的好处是,如果有人在没有POST请求的情况下徘徊到URL,他们就不会马上得到一个令人讨厌的405(当然还有其他方法可以避免它,只是说')。