2016-09-21 60 views
-1

我得到这个错误,当我做一整列的总和:无法转换{ 'price_total__sum':十进制( '258.00')}为十进制

Cannot convert {'price_total__sum': Decimal('258.00')} to Decimal 

这里整个项目:https://github.com/pierangelo1982/djangocommerce/tree/berge

def add_to_order(request): 
    if request.method == "POST": 
     form = AddOrderForm(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.user = request.user 
      post.published_date = timezone.now() 
      post.tot_price = CartItem.objects.filter(user_id=request.user.id).aggregate(Sum('price_total')) 
      post.save() 
      cart_list = CartItem.objects.filter(user_id=request.user.id) 
      for cart in cart_list: 
       formOrder = AddOrderItemForm(request.POST) 
       post_cart = formOrder.save(commit=False) 
       post_cart.order = post 
     post_cart.product = cart.product 
     post_cart.composition = cart.composition 
     post_cart.price = cart.price 
     post_cart.quantity = cart.quantity 
     post_cart.total = cart.price_total 
     post_cart.price_discount = cart.price_discount 
       post_cart.price_reserved = cart.price_reserved 
       post_cart.save() 
      #cart_list.delete() #cancello carrello dopo ordine 
      return redirect('/order', pk=post.pk) 
    else: 
     form = AddOrderForm() 
    return render(request, 'order-form.html', {'form': form}) 

我的模型订单,接收和值,和形式:

class Order(models.Model): 
    user = models.ForeignKey(User, null=True, blank=True, verbose_name="Utente") 
    code = models.CharField('Codice', max_length=250, null=True, blank=True) 
    tot_price = models.DecimalField('Prezzo', max_digits=10, decimal_places=2, blank=True, null=True) 
    tot_discount = models.DecimalField('Totale Scontato', max_digits=10, decimal_places=2, blank=True, null=True) 
    tot_price_reserved = models.DecimalField('Prezzo Scontato Riservato', max_digits=10, decimal_places=2, blank=True, null=True) 
    pub_date = models.DateTimeField('date published', editable=False) 
    inlavorazione = models.BooleanField('in lavorazione', default=False) 
    pagato = models.BooleanField('pagato', default=False) 
    spedito = models.BooleanField('spedito', default=False) 
    chiuso = models.BooleanField('chiuso', default=False) 

    def save(self, *args, **kwargs): 
     self.pub_date = datetime.now() 
     super(Order, self).save(*args, **kwargs) # Call the "real" save() method. 

    def __unicode__(self): 
     return self.pub_date.strftime('%Y-%m-%d') 

    class Meta: 
     verbose_name_plural = "Ordine" 
     ordering = ['id'] 

形式:

class AddOrderForm(ModelForm): 
    class Meta: 
     model = Order 
     fields = ['user', 'tot_price', 'tot_discount', 'tot_price_reserved'] 
+0

您可以发布您使用的模板和模型吗? – vmonteco

+0

看起来你想将字典转换为十进制?很难说没有看到你正在使用的数据。 – ospahiu

+0

我有更新的模型等.... –

回答

1

如错误所示,您的aggregate()调用返回字典:{'price_total__sum': Decimal('258.00')}。您不能将该字典设置为目标模型中的DecimalField;您需要首先提取实际值。

price_total = CartItem.objects.filter(user_id=request.user.id).aggregate(Sum('price_total')) 
post.tot_price = price_total['price_total__sum'] 
+0

噢谢谢...我非常感激你......真的! –