2011-03-27 16 views
0

私はここでバグを把握できません。自分のモデルにIntegerField(給与)があります。そのフィールドの型はそれぞれのモデルフォームでオーバーライドされています。フォームのために、私は給料をRegexFieldにし、コンマを排除するカスタム検証を追加しました。私もモデルフォームフィールドをCharFieldにしてみました。成功しませんでした。ここでDjangoモデルフォームの検証に失敗しました

class Background_Check(models.Model):  
    user=models.ForeignKey(User, unique=True) 
    salary=models.IntegerField(blank=True,max_length=10) 

class Background_CheckForm(forms.ModelForm): 
    salary=forms.RegexField(label=_("Salary"), max_length=10, regex=r'^[\d\s,]+', 
    #help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."), 
    error_messages = {'invalid': _("Please enter a valid salary")}) 

    class Meta: 
    model=Background_Check 
    exclude=('user') 



def clean_salary(self): 
    salary=str(self.cleaned_data["salary"]) 
    re.sub(r'[,]','',salary) 
    return salary 

が私の見解です:

@login_required 
def profile_settings(request): 
    page="account background" 
    user=User.objects.get(pk=request.user.id) 
    save_success=request.GET.get('save','') 
try: 
    profile=user.background_check_set.all()[0] 
    profileform=Background_CheckForm(instance=profile) 
    except IndexError: 
    profile='' 
    profileform=Background_CheckForm() 
    if request.method=='POST': 
    #might be able to work get_or_create_object method here 
     if profile: 
      profileform=Background_CheckForm(request.POST,instance=profile) 
     else: 
      profileform=Background_CheckForm(request.POST) 
     if profileform.is_valid(): 
      salary=profileform.cleaned_data['salary'] 
      profile=profileform.save(commit=False) 
      profile.user=user 
      profile.save() 
      return HttpResponseRedirect("/account/profile/settings/?save=1") 
     else: 
      return render_to_response('website/profile_settings.html', {'page':page, 'profileform':profileform}, context_instance=RequestContext(request)) 
    else: 
     return render_to_response("website/profile_settings.html", {'page':page,'profile':profile,'profileform':profileform,'save_success':save_success}, context_instance=RequestContext(request)) 

私はのModelFormを検証しようとすると、私は(この値は整数でなければなりません)無効IntegerFieldとするための標準的なエラーメッセージが表示されます。何が起きてる?

+0

このフォームはどのように使用していますか? –

+0

私のテンプレートに{{background_checkform.field}}というフォームフィールドを表示し、私のビューで.is_valid()を使って処理します。 – Ben

+0

私が言ったのは、ビューを表示してください。このフォームをまったく使用しているかのようには見えません。 –

答えて

1

あなたの投稿では、clean_salary()メソッドは正しくインデントされていません。 Background_CheckFormクラスの一部である必要があります。

あなたのコードが投稿と同じ方法で字下げされている場合、clean_salary()メソッドは呼び出されず、明らかに標準エラーメッセージが表示されます。

関連する問題