2013-11-03 4 views
0

Hy. 내 데이터베이스에 대한 레코드를 수정하고 싶습니다. 내가 가진 :장고 - 레코드를 수정할 수 없습니다

models.py

class People(models.Model): 
first_name = models.CharField(max_length = 50) 
last_name = models.CharField(max_length = 50) 
email = models.EmailField(blank = True) 
grade = models.CharField(max_length = 2) 

def __unicode__(self): 
    return '%s %s' % (self.first_name, self.last_name) 

class PeopleForm(ModelForm): 
class Meta: 
    model = People 

    fields = ['first_name', 'last_name', 'email', 'grade'] 

views.py

def modify(request, person_pk): 
title = 'Creating new program' 
template = 'modify.html' 

data = People.objects.get(pk = person_pk) 

form = PeopleForm(instance=data) 
context = {'form': form} 
if request.POST: 
    form = PeopleForm(request.POST) 
    if form.is_valid(): 
     form.save() 
     return HttpResponseRedirect(reverse('/peoples/')) 
    else: 
     return render_to_response(template, context, context_instance=RequestContext(request)) 
return render_to_response(template, context, context_instance=RequestContext(request)) 

urls.py

url(r'^modify/(?P<person_pk>.*)$', views.modify, name='modify'), 

forms.py

class PeopleForm(forms.ModelForm): 

class Meta: 
    model = People 
    fields = ('first_name', 'last_name', 'email', 'grade') 

그리고 템플릿

<form action="/peoples/" method="post">{% csrf_token %} 
<ul> 
{{form.as_ul}} 
</ul> 
<input type="submit" name="submit" value="Modify"> 
</form> 

나는 내가 수정 버튼을 클릭하면, 내가 필드를 완료하고 내가 이전 페이지로 버튼을 누를 때, 데이터베이스에서 항목 필드가 업데이트되지 않는 이유를 모르겠어요. 의견 있으십니까?

답변

1

내가보기에 이상하게 보인 주된 이유는 사용자의 HTML form 태그가 동작으로 "/peoples/"을 가지고 있지만 URL이 여기 보이는 코드에서 양식 처리보기에 바인딩되어 있지 않다는 것입니다. 대부분 내 양식에 action=""을 사용하여보기를 렌더링 한 것과 동일한 URL로 제출합니다.

둘째, 당신은 당신의보기에서 파이썬 변수 form를 다시 정의 할 때 :

if request.POST: 
    form = PeopleForm(request.POST) 

이미 컨텍스트에 이전 form을 할당하고 다시 할당하지 않습니다. 따라서 양식이 유효하지 않으면 오류 또는 제출 된 값을 볼 수 없습니다.

양식 작업이 잘못되어 POST 데이터로보기가 호출되지 않는 경우에는 물론 관련이 없습니다.

+0

HTML 폼 태그에서 "/ peoples /"를 삭제하면 기존 페이지를 수정하는 대신 새 레코드가 만들어집니다. –

+0

'POST' 데이터와 함께 폼 생성자에'instance'를 전달해보십시오 :'form = PeopleForm (request.POST, instance = data)' –

+0

정말 고마워요! –

관련 문제