0

나는 해결할 수있는 문제가 있지만 어떻게하면 기본적인 것이 빠져 있다는 것을 알 수 없다는 사실을 알 수 없다. 누군가가 나를 도울 수 있기를 바랍니다.Django의 HTTP 요청의 겉으로는 이상한 논리

그래서 클래스 기반 업데이트보기에는 인라인 서식 세트가 있습니다. 나는보기를 렌더링하기 위해 바삭한 양식을 사용합니다. 아래의 코드가 처음으로 작동 한 후 어떤 이유로 브라우저에서 업데이트 페이지를로드하려고 할 때 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

양식을 렌더링하는 템플릿 코드를 표시하십시오. – solarissmoke

답변

2

if self.request.GET은 "요청이 GET 인 경우"를 의미하지 않으며 if self.request.POST은 "요청이 POST 인 경우"를 의미하지 않습니다. 그들은 각각 GET 및 POST 사전에 부울 연산자를 사용하고 있습니다. 파이썬에서는 dicts가 비어 있으면 False를, 그렇지 않으면 True를 반환합니다.

그래서 호출은 실제로 "요청에 일부 쿼리 문자열 매개 변수가 있습니까?"라고 요청합니다. 요청이 GET인지 여부에 상관없이 사실 일 수도 있고 그렇지 않을 수도 있습니다. "요청에 본문이 있어야합니까?" 빈 POST로 참이어야합니다.

실제로 요청 유형을 확인하려면 if request.method == 'GET' (또는 'POST')을 명시 적으로 확인해야합니다.