2011-05-02 7 views
1
페이지 183에

184 :실용 장고 프로젝트 - 페이지 183 다음과 같은 코드가 184

form = SnippetForm(instance=snippet, data=request.POST) 

가 아닌가 :

def edit_snippet(request, snippet_id): 
    snippet = get_object_or_404(Snippet, pk=snippet_id) 
    if request.user.id != snippet.author.id: 
     return HttpResponseForbidden() 
    if request.method == 'POST': 
     form = SnippetForm(instance=snippet, data=request.POST) 
     if form.is_valid(): 
      snippet = form.save() 
      return HttpResponseRedirect(snippet.get_absolute_url()) 
    else: 
     form = SnippetForm(instance=snippet) 
    return render_to_response('cab/snippet_form.html',{ 'form': form, 'add': False }) 
edit_snippet = login_required(edit_snippet) 

왜 여기에 데이터 속성을 추가 할 필요가 인스턴스 속성이 충분합니까?

요청 방법이 POST가 아닌 경우 일반적으로 GET 메서드 일 수 있습니다. 이 경우 데이터 속성이없는 이유는 무엇입니까? 다른 요청 방법을 고려해야하는 이유는 무엇입니까? 우리가 쓸 수 없습니다 : 요청 방법은 게시하지 않은 경우 그것은 더 논리적 소리

def edit_snippet(request, snippet_id): 
    snippet = get_object_or_404(Snippet, pk=snippet_id) 
    if request.user.id != snippet.author.id: 
     return HttpResponseForbidden() 
    if request.method == 'POST': 
     form = SnippetForm(instance=snippet, data=request.POST) 
     if form.is_valid(): 
      snippet = form.save() 
      return HttpResponseRedirect(snippet.get_absolute_url()) 
    return render_to_response('cab/snippet_form.html',{ 'form': form, 'add': False }) 
edit_snippet = login_required(edit_snippet) 

나 사용자 편집 그의 조각이 들어 가지 않도록. 이 점들을 설명해 주시겠습니까?

답변

1

은 "edit_snippet"기능의 양쪽 모두의 (1) (2) 사용자가 양식에 대한 변경 사항을 저장할 때 후속 POST 요청.

이 점을 염두에두고 POST가 아닌 경우 단순히 데이터베이스에서 검색 한 "스 니펫"변수에서 양식을 채우는 것이 좋습니다. 알다시피이 경우에는 "데이터"매개 변수가 없습니다. 데이터베이스에 있던 내용이 사용자에게 표시됩니다.

그러나 사용자가 양식을 저장하면 POST 사례에서 "snippet"변수는 데이터베이스에서 검색 한 변수 만 보유합니다. 사용자가 게시 한 양식 필드 (request.POST)의 내용을 "data"매개 변수로 설정하면 (1) request.POST의 사용자 편집 내용을 객체에 저장 한 다음 (2)이 변경 사항의 유효성을 검사합니다.

+0

두 분 모두에 진심으로 감사드립니다. – Peter

2

장고 방법 : 동일한보기가 편집 (GET) 및 유효성 검사 (POST)를위한 양식을 표시하는 데 사용됩니다.

docs에서이 예를 참조 :

도면에서 폼 처리를위한 기준 패턴은 다음과 같다 :

def contact(request): 
    if request.method == 'POST': # If the form has been submitted... 
     form = ContactForm(request.POST) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
      # Process the data in form.cleaned_data 
      # ... 
      return HttpResponseRedirect('/thanks/') # Redirect after POST 
    else: 
     form = ContactForm() # An unbound form 

    return render_to_response('contact.html', { 
     'form': form, 
    })