2014-05-19 3 views
5

Django에서 FloatField를 소수점 이하 2 자로 제한하는 방법을 찾고 있습니다. 누구나 DecimalField를 사용하지 않고도이 작업을 수행 할 수있는 방법을 알았습니다.django FloatField를 소수 2 자리로 제한

decimal_places=2을 시도했지만 이것은 float 필드 내에서 마이 그 레이션 오류가 발생했기 때문에이 메서드는 DecimalFields 내에서만 작동해야한다고 생각합니다.

+0

왜 'DecimalField'를 사용하지 않으시겠습니까? – alecxe

+0

십진법 필드가 입력 상자 안에 증가 및 감소 화살표를 추가했기 때문에'models.FloatField (default = to_some_value)' – ajkumar25

+0

을 사용했는데 기본 방법을 시도하지 않았지만이를 보면서 볼 수 있기를 원합니다. 만약 내가 필요로하는 것에 대한 권리. –

답변

11

FloatField이 양식에 나타나는 방식에만 관심이있는 경우 템플릿 필터 floatformat을 사용할 수 있습니다. 장고 문서에서

:

숫자 정수 인수와 함께 사용할 경우, floatformat는 많은 소수 자릿수로 숫자를 반올림합니다.

값 = 34.23234, 다음 템플릿에서 예를 들어, :

def validate_decimals(value): 
    try: 
     return round(float(value), 2) 
    except: 
     raise ValidationError(
      _('%(value)s is not an integer or a float number'), 
      params={'value': value}, 
     ) 

:

{{ value|floatformat:2 }} # outputs 34.23 
+0

그게 전부는 아니지만 내가 찾고있는 것이지만 이것은 당신의 도움을 위해 미래의 프로젝트에 도움이 될 것이라고 확신합니다. . –

+0

이것은 도움이됩니다. 나는 장고'FloatField (기본값 = 0.00) '로 Postgres를 사용하고 있지만, 쓸모없는'0 '을 소수점 이하 자리에서 제거하여'0 '으로 저장하고있다. 의미있는 것이지만 일관된 값인'0.00' 또는' 5.43' 템플릿에서 ... {{value | floatformat : 2}}'트릭을 수행했습니다. –

+0

내 [answer] (https://stackoverflow.com/questions/23739030/restrict-django-floatfield-to-2- 소수점 이하 자리수/46081058 # 46081058)를 사용하여 데이터 필드가 항상 데이터베이스 수준에서 두 개의 소수로 반올림되도록합니다. –

0

장고 때문에 당신은 FloatField에 대한 사용자 지정 유효성 검사기/또는 ModelFields을 사용할 수 있습니다 1.8 이상 ... 그리고 모델에서 다음과 같이 적용 할 수 있습니다.

from django.db import models 

class MyModel(models.Model): 
    even_field = models.FloatField(validators=[validate_decimals]) 
+0

이것은 작동하지 않습니다. 유효성 검사기는 저장되는 값을 변경하지 않고 값이 수용 가능한지 확인합니다. 값이 받아 들여지지 않으면 예외가 발생해야합니다. 저장중인 값은 수정되지 않습니다. –

+0

float 필드가 소수 둘째 자리를 반올림하게하는 대답은 아래의 내 대답을 참조하십시오. –

3

템플릿의 모델 표현을 변경하는 대신 모델이 항상 소수점 이하 두 자리 만 저장되도록하려면 모델의 사용자 정의 저장 방법이 효과적입니다. 아래의 예제 모델은 방법을 보여줍니다.

class MyDataModel(models.Model): 
    my_float = models.FloatField() 

    def save(self, *args, **kwargs): 
     self.my_float = round(self.my_float, 2) 
     super(MyDataModel, self).save(*args, **kwargs) 

이제이 모델을 저장할 때마다 당신은 필드가 두 소수 자릿수의 부동로 채워집니다 보장합니다. 이것은 임의의 소수 자릿수로 반올림하여 일반화 할 수 있습니다.

관련 문제