2013-09-30 2 views
4

고유 한 종류의 문제가 있습니다. "floatField에"$ 90 "값을 넣습니다. 청소하고 모델에 "90.0"으로 저장해야한다고 가정합니다.Django ModelForm float 필드가 Clean_Field 메소드를 호출하지 않습니다.

하지만 "$ 90"을 입력하고 clean_filed 메소드를 호출하면 해당 메소드가 호출되지 않습니다. 하지만 깨끗한 (자체) 메소트에 중단 점을 적용하고 값을 얻으려고하면 None이 표시됩니다.

나를 도와주세요. 여기 내 코드가있다.

Model 
class Project(models.Model): 
foo = models.FloatField("foo", 
     null=True, blank=True 
    ) 


forms 
widgets = { 
     'foo': forms.TextInput(attrs={'currency': 'true'})} 

    def clean_foo(self): 
     value = self.cleaned_data.get('foo') 
     print value # i get NONE here............. 
     return value 
+1

다른 입력을 시도해 보셨습니까? "$"표시가 없거나 "90.0"이 이미 없으면 "90"과 유사합니까? 청소와 관련된 문제인지 아닌지 확인해보십시오. – yuvi

답변

13

양식 API의 clean_<field> 후크 추가 검증을 수행을위한 것입니다. 필드가 clean 메소드를 호출 한 후에 호출됩니다. 필드에서 입력이 유효한 것으로 간주되지 않으면 clean_<field>이 호출되지 않습니다. 이것은 Field.clean() 메소드가 ValidationError를 제기하는 경우, 모든 필드 별 청소 방법은 호출되지 않습니다, 사용자 지정 유효성 검사 문서 모든 필드에 대한

https://docs.djangoproject.com/en/stable/ref/forms/validation/에 기록됩니다. 그러나 나머지 필드의 청소 방법은 계속 실행됩니다.

$90은 부동으로 확인되지 않으므로 호출되지 않습니다. 대신 입력을 플로트 (float)로 확인하기 전에 입력을 제거하는 FloatField의 하위 클래스 ($ 등 제거)를 작성해야합니다.

관련 문제