2012-05-18 37 views
15

Im cố gắng để lưu các kết quả hoạt động trong admin.py của tôi và tôi có lỗi này:kết quả quantize có quá nhiều chữ số cho bối cảnh hiện nay

quantize result has too many digits for current context

.... 
def save_model(self, request, obj, form, change): 

    usuario_libra = obj.consignee.membresia.libra 
    valores   = Valores.objects.get(pk=1) 
    vtasa   = valores.tasa 
    vaduana   = valores.aduana 
    vgestion  = valores.gestion 
    vfee   = valores.fee 
    vcombustible = valores.combustible 

    trans_aereo  = obj.peso * usuario_libra * vtasa 
    aduana   = (obj.peso * vaduana)*vtasa 
    fee_airpot  = (obj.peso * vfee)*vtasa 
    combustible  = (obj.peso * vcombustible)*vtasa 
    itbis   = (trans_aereo+vgestion)*Decimal(0.16) 
    total   = trans_aereo + vgestion + aduana + fee_airpot + combustible + itbis 

    if not obj.id: 
     obj.total = total 
     ... 

gì này có nghĩa là ?, mọi lĩnh vực mô hình của tôi là Decimal Bất kỳ sự giúp đỡ xin vui lòng

Cảm ơn bạn

+0

Trợ giúp [this] (http://stackoverflow.com/questions/2051575/django-combine-models-decimalfield-with-forms-error-quantize-result-has-too) có giúp ích không? – okm

+0

@okm tôi đã cố gắng và không trợ giúp: ( – Asinox

Trả lời

20

tôi đã có thể giải quyết vấn đề này bằng cách tăng sự lựa chọn trường 'max_digits'.

class Myclass(models.Model): 
    my_field = models.DecimalField(max_digits=11, decimal_places=2, blank=True, null=True) 

Hãy đảm bảo đủ lớn để vừa với số dài nhất bạn muốn lưu.

Nếu điều đó không làm việc cũng có thể cần phải thiết lập độ chính xác lớn hơn bằng cách:

from decimal import getcontext 
    ... 
    getcontext().prec = 11 

Xem tài liệu thập phân python cho các thông số bối cảnh đầy đủ.

+2

Lưu ý, điều này không lý tưởng vì nó thay đổi ngữ cảnh ở mọi nơi, điều này có thể phá vỡ mã khác sử dụng nhiều hơn 11 chữ số. – Cerin

Các vấn đề liên quan