J'obtiens le calcul correct de la quantité et du prix indiqué dans mon terminal, mais lorsque j'essaye de l'enregistrer dans ma base de données, je reçois cette erreur impossible de décompresser l'objet CustomerPurchaseOrderDetail non itérable J'ai ce code dans mon views.py

def addtocart(request):
    userID = request.POST.get("userID")
    client = Customer(id=userID)
    vegetables_id = request.POST.get("id")
    quantity = request.POST.get("quantity")
    percentage = request.POST.get("percentage")
    price = request.POST.get("price")
    v = Product(id=vegetables_id)
    total = float(quantity) * float(price)
    print(total)

    insert, created = CustomerPurchaseOrderDetail(
        profile=client,
        products = v,
        quantity = quantity,
        unitprice=price,
        discount_percentage = percentage,
        amount = total
    )
    if not created:
        insert.quantity += 1
        insert.save()

C'est mes models.py

class CustomerPurchaseOrderDetail(models.Model):
    profile = models.ForeignKey(Customer,on_delete=models.SET_NULL, null=True, blank=True,
                                verbose_name="Client Account")

    products = models.ForeignKey(Product,on_delete=models.SET_NULL, null=True, blank=True,verbose_name="Product")
    quantity = models.IntegerField(null=True, blank=True, default=1)
    unitquantity = models.FloatField(max_length=500, null=True, blank=True)
    totalquantity = models.FloatField(max_length=500, null=True, blank=True)
    unitprice = models.FloatField(max_length=500, null=True, blank=True)
    discount_percentage = models.FloatField(max_length=500, null=True, blank=True)
    discounted_unitprice = models.FloatField(max_length=500, null=True, blank=True)
    discounted_amount = models.FloatField(max_length=500, null=True, blank=True)
    amount = models.FloatField(max_length=500, null=True, blank=True)

C'est ma trace

Traceback:

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\User\Desktop\LastProject\OnlinePalengke\customAdmin\views.py" in addtocart
  926.         amount = total

Exception Type: TypeError at /addtocart/
Exception Value: cannot unpack non-iterable CustomerPurchaseOrderDetail object

J'espère que vous m'aiderez avec cette question, merci d'avance.

0
Mary 2 sept. 2020 à 06:25

3 réponses

Meilleure réponse
insert, created = CustomerPurchaseOrderDetail.objects.get_or_create(
        profile=client,
        products = v,
        quantity = quantity,
        unitprice=price,
        discount_percentage = percentage,
        amount = total
    )
    if not created:
        insert.quantity += 1
        insert.save()
1
kaito 2 sept. 2020 à 03:37

C'est déroutant car il dit que l'erreur est causée par amount = total, mais je pense que l'erreur est en fait causée par la fin du constructeur CustomerPurchaseOrderDetail.

insert, created = CustomerPurchaseOrderDetail(
        profile=client,
        products = v,
        quantity = quantity,
        unitprice=price,
        discount_percentage = percentage,
        amount = total
    )

Donc la ligne à l'origine de l'erreur ressemble plus à

inserted, created = CustomerPurchaseOrderDetail(...)

CustomerPurchaseOrderDetail appelle la fonction init pour cette classe, qui, je suppose, est définie dans le modèle. init renvoie toujours l'instance de la classe appelée. Cependant, comme vous avez deux variables à droite de =, python attend un itérable qui renvoie deux valeurs.

Et apparemment, CustomerPurchaseOrderDetail ne correspond pas à la facture.

1
in-tension 2 sept. 2020 à 03:43

Je pense que vous essayez d'appeler le get_or_create() - (django doc) méthode

insert, created = CustomerPurchaseOrderDetail.objects.get_or_create(
        profile=client,
        products = v,
        quantity = quantity,
        unitprice=price,
        discount_percentage = percentage,
        amount = total
    )
1
JPG 2 sept. 2020 à 03:38