2011-01-25 3 views
0

일종의.Django - 데이터가 유효하지 않더라도 ModelForm이 저장됩니다.

나는 modelform은과 같이 정의 :

class EditUserForm(UserForm): 
    def __init__(self,data=None,instance=None): 
     UserForm.__init__(self,data=data,instance=instance) 
     del self.fields['username'] 

내가 내 EditUserForm에 표시에서 사용자 이름 필드를 제외하고 싶었 기 때문에 이런 짓을하지만 난 정의 폼에 사용자 이름 필드, 장고 방지의 버그를 덮어 때문에 이 일을하는 것이므로이 방법으로 양식을 썼습니다.

내보기 코드는 다음과 같습니다

if request.method == 'POST': 
     uf = EditUserForm(request.POST,instance=user) 
     upf = StudentProfileForm(request.POST,instance=profile) 
     if uf.is_valid() and upf.is_valid(): 
      print 'VALID' 
      uf.save() 
      upf.save() 
      messages.success(request, 'You have successfully updated your profile.') 
      return HttpResponseRedirect('/student/editprofile') 
     else: 
      print 'INVALID' 

을 테스트하려면, 나는 FIRSTNAME을 변경하고 암호가 일치하지 만들고 내가 제출 한 때 나는 INVALID가 (제대로 나타난 암호 유효성 검사 오류를 인쇄 한 것으로 나타났습니다 시도)하지만 "환영합니다 (사용자 이름) (사용자 성)"페이지의 맨 위에 "나는 첫 번째 이름이 변경된 것으로 나타났습니다. 다른 페이지로 이동하면 올바른 값으로 돌아갑니다. 어떻게 이런 일이 일어나지 않게합니까?

이 내 html 코드입니다 : 무슨 일이 일어나고 있는지에 관해서는

{% if user.is_authenticated %} 
    Welcome, <a href = "/{{user.get_profile.getType}}/profile">{{user.first_name}} {{user.last_name}}</a> | 
    <a href = "/auth/logout">Logout</a> 
{% else %} 
{% endif %} 

내 생각 엔 내가 데이터를 게시 할 때, 그것의 실제 user.first_name을 덮어 맥락에서 user.first_name을두고있다. 데이터가 아직 저장되지 않기 때문에하지만 ... 유효하지 그래서

, 어떻게 그것이 실제로 유효한 때까지 값의 변화없이 게시되고있어 템플릿에 user.first_name 수 있습니다 ??

+1

해당보기의 나머지 코드를 표시하십시오. –

답변

0

귀하의 가정이 맞습니다. 유효성을 검사하면 ModelForm은 주어진 인스턴스 (user)를 주어진 data으로 업데이트하여 잘못된 상태로 둡니다. 당신은 할 수

: user의 사본을 만들 수

  • 시도,
  • 가 데이터베이스에서 user를 다시로드,
  • 또는 임시 변수에 user.first_name를 저장 및 검증 실패시 다시 설정

편집 : ModelForm이 인스턴스를 수정하더라도 저장하지 않습니다.

+0

내가 할 수있는 일은 내 UserProfile에 "display_name"필드를 만들고이를 사용하여 템플릿에 사용자 이름을 표시하는 것입니다. UserProfile 저장시 display_name = user.first_name + user.last_name을 설정합니다. – JPC

관련 문제