Как работать со свойством модели в представлении django
Я пытаюсь сделать приложение для электронной коммерции, в котором я должен добавить код купона на странице оформления заказа. У меня есть свойство модели для проверки валидности кода купона. Вот мой код
модель:
class CoupenCode(models.Model):
code=models.CharField(max_length=100)
startdate=models.DateField()
enddate=models.DateField()
discount=models.IntegerField()
disc_type=models.CharField(max_length=20,choices=(
('Amount','Amount'),
('Percentage','Percentage')))
usercount=models.PositiveIntegerField()
min_amount=models.PositiveIntegerField()
@property
def is_expired(self):
if datetime.now().date() > self.enddate or datetime.now().date() < self.startdate :
return False
return True
class Meta:
db_table = 'CoupenCode'
ordering = ['-id']
def __str__(self):
return self.code
просмотров:
def fncoupon(request):
if request.method=="POST":
coupon=request.POST.get('promo')
couponcode=CoupenCode.objects.filter(code=coupon)
validity=couponcode.is_expired()
if validity == True :
if couponcode.disc_type == "Amount":
discount=couponcode.discount + 'Rs'
else:
discount=couponcode.discount + '%'
print(discount)
return JsonResponse({'discount':discount})
else:
message="This coupon code is not valid"
print(message)
return JsonResponse({'message':message})
проблема в том, что я не могу проверить действительность кода купона, используя это свойство в представлениях. оно выдает мне ошибку
'QuerySet' object has no attribute 'is_expired'
Может ли кто-нибудь подсказать мне, как я могу решить эту проблему.
Вы используете .filter(…), но это вернет QuerySet, а значит коллекцию из CouponCode. Вы должны использовать .get(…) или еще лучше: get_object_or_404(…):
from django.shortcuts import get_object_or_404
def fncoupon(request):
if request.method == 'POST':
couponcode = get_object_or_404(CoupenCode, code=request.POST.get('promo'))
if not couponcode.is_expired:
if couponcode.disc_type == "Amount":
discount=couponcode.discount + 'Rs'
else:
discount=couponcode.discount + '%'
return JsonResponse({'discount':discount})
else:
message='This coupon code is not valid'
return JsonResponse({'message':message})
Однако не имеет особого смысла делать это через POST запрос: POST запрос обычно используется для выполнения боковых эффектов, тогда как GET используется для получения данных, здесь GET запрос кажется более подходящим.