2013-09-27 3 views
0

은 이제 나는이 비슷한 설정을 가지고 있다고 가정 해 봅시다 :동적 장고 모델의 필드 반환 값을 변경

class UnitsOfMeasure(models.Model): 
    name = models.CharField(max_length=40) 
    precision = models.PositiveIntegerField() 

class Product(models.Model): 
    name = models.CharField(max_length=100) 
    uom = models.ForeignKey(UnitsOfMeasure) 
    qty_available = models.DecimalField(max_tigits=10, decimal_places=10) 

이제 우리는 정밀 측정 인스턴스의 단위에 관련된 제품을 말할 수를 내가 할 수있는 방법 = 2 qty_available은 5.5000000000 대신 5.50을 반환합니까?

속성 장식자를 사용할 수는 있지만 양식의 필드로 qty_available을 사용하려는 경우이 문제가 해결되지 않습니다.

사용자 정의 필드 유형? 어떻게하면 관련 모델 인스턴스를 전달하고 액세스 할 수 있습니까 ??

귀하의 아이디어를 매우 높이 평가합니다!

답변

1

모델 필드의 __init__ 메서드를 무시하고 관련 측정 단위를 기반으로 max_digits을 설정하십시오. 그냥 프리젠 테이션 문제가 있다면

class ProductForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(ProductForm, self).__init__(*args, **kwargs) 
     self.fields['qty_available'] = models.DecimalField(max_digits=10, decimal_places=self.instance.uom.precision) 
    class Meta: 
     model = Product 
+0

이 단지 ModelForm의 문제를 해결한다. 템플릿에 값을 표시하는 방법은 무엇입니까? 그런 다음 사용자 정의 템플릿 필터가 필요합니다 ...이 필드와 다른 양식을 원한다면 어떻게해야합니까? 반복적으로이 코드를 반복해야 할 때보 다 아주 드문 것 같아요. – Simanas

+0

프리젠 테이션을 위해 속성이나 템플릿 태그를 사용할 수 있습니다. 여러 양식이 필요한 경우 상속을 중복 코드에 사용할 수 있어야합니다. 이는 사용자가 원하는만큼 DRY가 아닐 수도 있으며 사용자 정의 필드를 사용하여 더 지루한 작업을 수행 할 수도 있지만 간단하고 이해하기 쉽지는 않습니다. – Alasdair

0

, 당신은 당신의 템플릿에 simple_tag를 사용할 수 있습니다

@register.simple_tag 
def format_qty_available(product): 
    return product.qty_available.quantize(Decimal(10) ** -product.uom.precision) 
+0

양식 필드에서 작동하지 않습니다. 이것이 접근법이라면 템플릿 태그 – karthikr

+0

"팻 (Fat)"모델보다 모델 속성을 만드는 것이 좋습니다. 감사. 그러나 당신이 말했듯이, 나는 어쨌든 질문의 요점을 놓쳤습니다. – Germano