#python #django
Вопрос:
Я пытаюсь уже давно, но никак не могу найти решение … Поэтому я спрашиваю здесь, надеясь, что кто-нибудь сможет мне помочь 😉
Вот мои МОДЕЛИ (модели.py в /заказ) :
class Client(models.Model):
[...]
class Commande(models.Model):
objects = models.Manager()
date = models.DateTimeField(auto_now=True)
client = models.ForeignKey(Client, related_name='clients', on_delete=models.CASCADE)
remise = models.DecimalField(max_digits=5, decimal_places=2, default=0)
statut = models.CharField(max_length=200, db_index=True, null=False, blank=False, default='En cours')
class Cartdb(models.Model):
objects = models.Manager()
produit = models.ForeignKey(Produit, related_name='produit', on_delete=models.CASCADE)
qte = models.IntegerField(default=1)
prix = models.DecimalField(max_digits=10, decimal_places=2, default=15.00)
commande = models.ForeignKey(Commande, related_name='commande', on_delete=models.CASCADE)
def add_cartdb(self, produit, qte, prix, commande):
cartdb = self.create(produit=produit, qte=qte, prix=prix, commande=commande)
return cartdb
Вот мои взгляды (views.py в тот же каталог) :
def order_list(request, date_before=None, date_after=None, statut_request=None, client_request=None):
orders_list = Commande.objects.filter(statut='En cours').order_by('-date')
clients = Client.objects.all()
client_cmd = None
if date_before:
orders_list = orders_list.filter(date >= date_before)
if date_after:
orders_list = orders_list.filter(date >= date_after)
if statut_request:
orders_list = orders_list.filter(statut=statut_request)
if client_request:
client_cmd = get_object_or_404(Client, id=client_request)
orders_list = orders_list.filter(client=client_cmd)
paginator = Paginator(orders_list, 10)
page = request.GET.get('page')
try:
orders = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
orders = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
orders = paginator.page(paginator.num_pages)
context = {'client_cmd': client_cmd,
'clients': clients,
'orders': orders,
'orders_list': orders_list,
'paginate': True
}
return render(request, 'order/list.html', context)
def order_detail(request, id):
# order = Commande.objects.filter(id=id)
commande = get_object_or_404(Commande, id=id)
orders = Cartdb.objects.filter(commande=commande)
context = {
'commande': commande,
'orders': orders,
}
return render(request, 'order/detail.html', context)
И, наконец, вот фрагмент html-файла :
<table class="table table-striped table-hover">
<thead>
<tr>
<th class="text-left">Produit</th>
<th>Qte</th>
<th>Prix Unitaire</th>
<th>Total</th>
</tr>
</thead>
<tbody>
{% for item in orders %}
{% with produit=item.produit %}
<tr>
<td class="align-middle">
<a class="btn" href="{{ produit.get_absolute_url }}">{{ produit.nom }}</a>
</td>
<td class="align-middle">{{ item.qte }}</td>
<td class="align-middle">{{ item.prix }} €</td>
<td class="align-middle">{{ item.total }} €</td>
</tr>
{% endwith %}
{% endfor %}
<tr class="table-secondary">
<td colspan="3" class="text-left">Total</td>
<td colspan="2" class="num">{{ orders.get_total_prix }} €</td>
</tr>
</tbody>
</table>
В этом Detail.html Мне нужно иметь общую сумму для каждого продукта (qte * prix), и в конце таблицы должна быть общая сумма (сумма всех сумм каждой строки).
Я кое-что пробовал в моделях.py в класс Cartdb, чтобы добавить некоторые функции, такие как get_total и т. Д… но не знаю, как это сделать и как использовать их в представлениях или details.html 🙂
Спасибо за вашу помощь 🙂