我有一个问题,我解决了但事实是我不明白如何告诉我有一些基本的东西我不知道。希望有人可以帮助我。
所以我有一个基于类的更新视图,带有内联formset。我使用脆弱的表单来渲染视图。下面的代码首先工作,然后由于某种原因,当我尝试在浏览器中加载更新页面时,它开始给我Management form missing
错误。
#views.py:
class CaveUpdateView(UpdateView):
model=Cave
form_class=CaveForm
template_name='caves/cave_form.html'
def get_context_data(self,**kwargs):
context = super(CaveUpdateView, self).get_context_data(**kwargs)
entrance_helper = EntranceFormSetHelper()
context['entrance_helper'] = entrance_helper
if self.request.GET:
context['entrance_formset']=EntranceInlineFormSet(instance=self.object)
else:
context['entrance_formset']=EntranceInlineFormSet(self.request.POST, instance=self.object)
破坏了我的大脑后,我将get_context_data
函数的最后4行更改为此,所有内容都已解决:
if self.request.POST:
context['entrance_formset']=EntranceInlineFormSet(self.request.POST, instance=self.object)
else:
context['entrance_formset']=EntranceInlineFormSet(instance=self.object)
所以我的问题是,这两个表达式不相同吗?是否有其他类型的请求我以某种方式通过刷新发送我的浏览器?
答案 0 :(得分:2)
if self.request.GET
并不意味着“如果请求是GET” - 而if self.request.POST
并不意味着“如果请求是POST”。他们分别在GET和POST字典上使用布尔运算符 - 而在Python中,如果它们是空的,那么它们是布尔值False,否则是True。
所以,你的调用实际上是在询问“请求是否有一些查询字符串参数”,无论请求是否为GET,这可能是也可能不是,并且“请求是否具有正文”,这不是如果是空POST,则为true。
如果您确实想要检查请求的类型,则应明确检查if request.method == 'GET'
(或'POST'
)。