Задать вопрос
@darkglare

Как вывести информацию?

Здравствуйте. Есть система купонов на сайте. Вот views

from django.shortcuts import render, redirect
from django.views.decorators.http import require_POST
from django.utils import timezone
from .models import Coupon
from .forms import CouponApplyForm


@require_POST
def coupon_apply(request):
    now = timezone.now()
    form = CouponApplyForm(request.POST)
    if form.is_valid():
        code = form.cleaned_data['code']
        try:
            coupon = Coupon.objects.get(code__iexact=code,
                                        valid_from__lte=now,
                                        valid_to__gte=now,
                                        active=True)
            request.session['coupon_id'] = coupon.id
        except Coupon.DoesNotExists:
            request.session['coupon_id'] = None
    return redirect('cart:cart_detail')


Дело в том,что если неверно ввести код купона, то выйдет вот такая ошибка

5fccbfcbd8c51942669936.jpeg
models.py
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
from datetime import datetime

class Coupon(models.Model):
code = models.CharField(max_length=50, unique=True)
valid_from = models.DateTimeField()
valid_to = models.DateTimeField()
discount = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(100)])
active = models.BooleanField()

def __str__(self):
return self.code


Traceback:
Traceback (most recent call last):
File "C:\Users\User\source\repos\OnlineCourseMyShop(MAJOR)design_shablon_21_10_2020Coupons\OnlineCourse\env\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
File "C:\Users\User\source\repos\OnlineCourseMyShop(MAJOR)design_shablon_21_10_2020Coupons\OnlineCourse\env\lib\site-packages\django\core\handlers\base.py", line 249, in _legacy_get_response
response = self._get_response(request)
File "C:\Users\User\source\repos\OnlineCourseMyShop(MAJOR)design_shablon_21_10_2020Coupons\OnlineCourse\env\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\User\source\repos\OnlineCourseMyShop(MAJOR)design_shablon_21_10_2020Coupons\OnlineCourse\env\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\User\source\repos\OnlineCourseMyShop(MAJOR)design_shablon_21_10_2020Coupons\OnlineCourse\env\lib\site-packages\django\views\decorators\http.py", line 40, in inner
return func(request, *args, **kwargs)
File "C:\Users\User\source\repos\OnlineCourseMyShop(MAJOR)design_shablon_21_10_2020Coupons\OnlineCourse\coupons\views.py", line 20, in coupon_apply
except Coupon.DoesNotExists:
AttributeError: type object 'Coupon' has no attribute 'DoesNotExists'
[06/Dec/2020 14:26:27] "POST /coupons/apply/ HTTP/1.1" 500 95011
Not Found: /favicon.ico
[06/Dec/2020 14:26:28] "GET /favicon.ico HTTP/1.1" 404 4757


В целом здесь происходит исключение DoesNotExist. Но как мне просто вывести в самом шаблоне информацию типа: "Вы ввели неверный купон".
Мне не нужно чтобы вылетала такая ошибка да еще и на отдельной странице и в таком непрезетабельном виде : ) Уверен,что-то надо поменять во views
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
@Art005
from django.core.exceptions import ObjectDoesNotExist

и измените обработку на
except ObjectDoesNotExist:
Ответ написан
Комментировать
@darkglare Автор вопроса
А как в шаблоне добавить надпись ,что мол ввели некорректный код купона? Если с помощью if то {% if что вот тут должно быть написано? %}
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы