J'ai donc créé une application Web où un utilisateur peut payer à un fournisseur particulier (total 2 fournisseurs). Lorsque j'essaie de soumettre le formulaire, j'obtiens l'erreur mentionnée ci-dessus. En outre, il est indiqué que l'objet 'employee' n'est pas itérable. Compte tenu des fichiers HTML, views.py et models.py ci-dessous :

HTML:

<div class="container boxes" style="margin: auto; text-align: center;background-color: #ede8e8;border-radius: 10px;opacity: 0.95;width: 60%;">
    <br>
    {% if model %}
        <h3>Balance amount is {{ model.balance }}</h3>
    {% endif %}
    <h3>Select vendor to pay!</h3>
    <br>

    <form method="POST" action="/profiles/userLogin/">
        <div class="custom-control custom-radio">
            <input type="radio" class="custom-control-input" id="defaultGroupExample1" name="groupOfDefaultRadios" value="1">
            <label class="custom-control-label" for="defaultGroupExample1">Vendor 1</label>
        </div>

        <div class="custom-control custom-radio">
            <input type="radio" class="custom-control-input" id="defaultGroupExample2" name="groupOfDefaultRadios" value="2">
            <label class="custom-control-label" for="defaultGroupExample2">Vendor 2</label>
        </div> 
        <input type="" class="form-control" id="amount1" name="amt" aria-describedby="emailHelp" placeholder="Enter amount"style="width: 25%;margin: 0 auto">

        <button type="submit" class="btn btn-primary" style="margin: 5px;" name="form1">Submit</button>

        <br>     
    </form> 
</div>

Views.py:

if 'form1' in request.POST:
            ven_id = request.POST.get("groupOfDefaultRadios")
            amount = request.POST.get("amt")
            x = employee.objects.get(name = request.user)
            x.balance = x.balance - int(amount)
            x.save()
            v = vendor.objects.get(id=ven_id)
            w = employee.objects.get(id=x.id)
            transaction.objects.create(vendor_id = v, emp_id=w,debit=amount,credit=0)
            y = employee.objects.get(name = request.user)
            return render(request, 'profiles/userLogin.html', {'model':y})

Models.py:

class vendor(models.Model):
    id = models.CharField(max_length=20, primary_key=True)
    name = models.CharField(max_length=30)

class employee(models.Model):
    name = models.OneToOneField(User, on_delete=models.CASCADE)
    id = models.CharField(max_length=20, primary_key=True)
    balance = models.IntegerField(default=0)

class transaction(models.Model):
    vendor_id = models.ForeignKey(vendor, on_delete=models.CASCADE)
    emp_id = models.ForeignKey(employee, on_delete=models.CASCADE)
    debit = models.IntegerField()
    credit = models.IntegerField()
    timestamp = models.DateField(("Date"), default=datetime.date.today)

Je n'arrive pas à comprendre pourquoi j'obtiens cette erreur. Toute aide est appréciée.

0
DHRUV KAUSHAL 9 févr. 2020 à 21:46

1 réponse

Meilleure réponse

Faites le changement ci-dessous dans votre vue.

y = employee.objects.values().get(name = request.user)

La méthode get() ne renverra que l'objet.

Voir la doc sur les valeurs()

https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values

1
Anupam Chaplot 10 févr. 2020 à 04:46