Как рассчитать общую сумму после применения скидки в Джанго? - PullRequest
0 голосов
/ 22 июня 2019

Я хочу рассчитать общую сумму после применения скидки.Для этого я сделал cart.py.Но когда я вызываю функции из cart.py в templates.html.Он не отображает ни общую сумму после скидки, ни процент со скидкой.

cart.py , созданный в приложении корзины

from decimal import Decimal
from django.conf import settings
from shop.models import Product
from coupons.models import Coupons

class Cart(object):

def __len__(self):
    return sum(item['quantity'] for item in self.cart.values())

def get_total_price(self):
    return sum(Decimal(item['price']) * item['quantity'] for item in self.cart.values())


def clear(self):
    del self.session[settings.CART_SESSION_ID]
    self.session.modified = True
@property
def coupon(self):
    if self.coupon_id:
        return Coupons.objects.get(id=self.coupon_id)
 def get_discount(self):
    if self.coupon:
        return (self.coupon.discount / Decimal('100')) * self.get_total_price()

 def get_total_price_after_discount(self):
    return self.get_total_price() - self.get_discount()

template.html

<tr class="gray2">
     <td colspan="2"> coupon ({{discount}}) % off</td>
     <td colspan="3"></td>
     <td class="num neg"> {{cart.get_discount|floatformat:"2"}}</td>
</tr>
<tr class="total">
                <td>Total</td>
                <td colspan="4"></td>
                <td class="num">{{cart.get_total_price_after_discount|floatformat:"2"}}</td>
</tr>
</table>
<div class="divo">
    <p>
        coupon code to apply discount
    </p>
    <form action="{% url 'coupons:apply' %}" method="post">
        {{coupon_apply_form}}
        {% csrf_token %}
        <input type="submit" value="apply" class="btn">
</form>
</div>

views.py

@require_POST
def coupon_apply(request):
    now = timezone.now()
    form = CouponApplyForm(request.POST)
    if form.is_valid():
        code = form.cleaned_data['code']
        try:
            coupon = Coupons.objects.get(code__iexact=code,
                                        valid_form__lte=now,
                                        valid_to__gte=now,
                                        active=True)
            request.session['coupon_id'] = coupon.id
        except Coupons.DoesNotExist:
            request.session['coupon_id'] = None

    return HttpResponseRedirect(reverse("cart"))

Эта часть файла template.html не отображается.Пожалуйста, если кто-нибудь может помочь мне в этом отношении.

Примечание:

  coupon_apply_form = CouponApplyForm()
  context={'cart':cart,'coupon_apply_form':coupon_apply_form}

Я написал это в view.py в приложении тележки.

1 Ответ

1 голос
/ 23 июня 2019

Вы не можете вызывать функции из вашего шаблона.Выполните вычисление в своих представлениях, сохраните новый итог в переменной и передайте его в свой шаблон через контекст.Если вам нужна помощь с фактическим кодированием того, что я описал, дайте мне знать.Это, однако, повторяющийся вопрос.

Редактировать: я бы рекомендовал задавать вопросы в будущем, которые описывают возникшую проблему, вместо того чтобы использовать детали, которые являются точными только для вашего вопроса.В качестве примера я хотел бы спросить (вызов функции из шаблона Django не работает), что очень лаконично, хотя выглядит как «простой» или, возможно, «тупой» вопрос.Надеюсь, это поможет вам в будущем!:)

...