У меня ошибка: объект 'NoneType' не имеет атрибута 'price' ошибка при рендеринге шаблона
У меня есть такие модели:
class Product(models.Model):
name = models.CharField(max_length=200)
category = models.CharField(max_length=300, choices=TOTAL)
subcategory = models.CharField(max_length=300, choices=SUBPRODUCT)
price = models.FloatField()
image = models.ImageField(null=True, blank=True)
def __str__(self):
return self.name
@property
def imageURL(self):
try:
url = self.image.url
except:
url = ''
return url
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True, blank=True)
date_ordered = models.DateTimeField(auto_now_add=True)
complete = models.BooleanField(default=False)
transaction_id = models.CharField(max_length=100, null=True)
def __str__(self):
return str(self.id)
@property
def shipping(self):
shipping = False
orderitems = self.orderitem_set.all()
for i in orderitems:
if i.product.digital == False:
shipping = True
return shipping
@property
def get_cart_total(self):
orderitems = self.orderitem_set.all()
total = sum([item.get_total for item in orderitems])
return total
@property
def get_cart_items(self):
orderitems = self.orderitem_set.all()
total = sum([item.quantity for item in orderitems])
return total
class OrderItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
@property
def get_total(self):
total = self.product.price * self.quantity
return total
Мой views.py: def store(request): data = cartData(request)
cartItems = data['cartItems']
order = data['order']
items = data['items']
context = {'cartItems':cartItems, 'order':order, 'items':items}
return render(request, 'store/store.html', context)
Это мой шаблон:
<div class="bottom">
<div class="total">
<span>Total</span>
<span class="total-amount">${{order.get_cart_total|floatformat:2}}</span>
</div>
<a href="{ url 'checkout' }" class="btn animate">Checkout</a>
</div>
</div>
Как я упоминал выше, у меня возникла эта ошибка: 'NoneType' object has no attribute 'price' error при рендеринге шаблона. В начале все работало. Я добавил 2 товара, и все заработало. Но, после добавления товаров, он выдает эту ошибку. Я пробовал много раз, но каждый раз получаю эту ошибку. Пожалуйста, помогите
Как предложил Iain Shelvington, почему вы установили OrderItem.prodcut nullable. если вы хотите, чтобы это было как есть, тогда вы можете попробовать следующий код. в модели OrderItem.
@property
def get_total(self):
if self.product and self.quantity: # handling case when either value is Null.
total = self.product.price * self.quantity
return total
else:
return 0