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とするための標準的なエラーメッセージが表示されます。何が起きてる?
このフォームはどのように使用していますか? –
私のテンプレートに{{background_checkform.field}}というフォームフィールドを表示し、私のビューで.is_valid()を使って処理します。 – Ben
私が言ったのは、ビューを表示してください。このフォームをまったく使用しているかのようには見えません。 –