Django 不支持 += 的操作数类型:'int' 和 'method'
Django unsupported operand type(s) for +=: 'int' and 'method'
我试图在我的电子商务网站中实现一个简单的逻辑,我将通过循环遍历订单并在 get_final_price 的帮助下获取他们的价格来计算总购物车价格,但突然出现此错误所以请帮助我
导致错误发生的函数
def get_total(self):
total_sum = 0
for order_item in self.items.all():
total_sum += order_item.get_final_price()
return total_sum
Models.py 文件
from django.db import models
from django.conf import settings
from django.db.models.deletion import CASCADE
from django.db.models.fields import DateTimeField
from django.urls import reverse
# # Create your models here.
CATEGORY_CHOICES = (
('S', 'Shirts'),
('SW', 'Sports wear'),
('OW', 'Outwear')
)
LABEL_CHOICES = (
('P', 'primary'),
('S', 'secondary'),
('D', 'danger')
)
class Item(models.Model):
title = models.CharField(max_length=100)
price = models.FloatField()
discount_price = models.FloatField(blank=True,null=True)
category = models.CharField( choices=CATEGORY_CHOICES, max_length=2)
label = models.CharField( choices=LABEL_CHOICES, max_length=1)
slug = models.SlugField()
description = models.TextField()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("product", kwargs={
'slug' : self.slug
})
def get_add_to_cart_url(self):
return reverse("add_to_cart", kwargs={
'slug' : self.slug
})
def get_remove_from_cart_url(self):
return reverse("remove_from_cart", kwargs={
'slug' : self.slug
})
class OrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
ordered = models.BooleanField(default=False)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.IntegerField(default = 1)
def __str__(self):
return f"{self.quantity} of {self.item.title}"
def get_total_item_price(self):
return self.quantity*self.item.price
def get_total_discount_item_price(self):
return self.quantity*self.item.discount_price
def get_amount_saved(self):
return self.get_total_item_price() - self.get_total_discount_item_price()
def get_final_price(self):
if self.item.discount_price:
return self.get_total_discount_item_price
return self.get_total_item_price
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
ordered = models.BooleanField(default=False)
items = models.ManyToManyField(OrderItem)
def __str__(self):
return self.user.username
def get_total(self):
total_sum = 0
for order_item in self.items.all():
total_sum += order_item.get_final_price()
return total_sum
发生错误
在您的 OrderItem
class 中,您的 get_final_price()
方法是 return 在一个函数中,而不是一个值。您需要 return 一个像这样的值,而不是 return 在函数中:
def get_final_price(self):
if self.item.discount_price:
discount_price = self.get_total_discount_item_price()
return discount_price
item_price = self.get_total_item_price()
return item_price
我也遇到了这个错误,因为我从来没有添加 @property
记得像这样添加@property
:
@property
def get_final_price(self):
if self.item.discount_price:
return self.get_total_discount_item_price
return self.get_total_item_price
https://docs.djangoproject.com/en/4.0/topics/db/models/#model-methods-1
我试图在我的电子商务网站中实现一个简单的逻辑,我将通过循环遍历订单并在 get_final_price 的帮助下获取他们的价格来计算总购物车价格,但突然出现此错误所以请帮助我
导致错误发生的函数
def get_total(self):
total_sum = 0
for order_item in self.items.all():
total_sum += order_item.get_final_price()
return total_sum
Models.py 文件
from django.db import models
from django.conf import settings
from django.db.models.deletion import CASCADE
from django.db.models.fields import DateTimeField
from django.urls import reverse
# # Create your models here.
CATEGORY_CHOICES = (
('S', 'Shirts'),
('SW', 'Sports wear'),
('OW', 'Outwear')
)
LABEL_CHOICES = (
('P', 'primary'),
('S', 'secondary'),
('D', 'danger')
)
class Item(models.Model):
title = models.CharField(max_length=100)
price = models.FloatField()
discount_price = models.FloatField(blank=True,null=True)
category = models.CharField( choices=CATEGORY_CHOICES, max_length=2)
label = models.CharField( choices=LABEL_CHOICES, max_length=1)
slug = models.SlugField()
description = models.TextField()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("product", kwargs={
'slug' : self.slug
})
def get_add_to_cart_url(self):
return reverse("add_to_cart", kwargs={
'slug' : self.slug
})
def get_remove_from_cart_url(self):
return reverse("remove_from_cart", kwargs={
'slug' : self.slug
})
class OrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
ordered = models.BooleanField(default=False)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.IntegerField(default = 1)
def __str__(self):
return f"{self.quantity} of {self.item.title}"
def get_total_item_price(self):
return self.quantity*self.item.price
def get_total_discount_item_price(self):
return self.quantity*self.item.discount_price
def get_amount_saved(self):
return self.get_total_item_price() - self.get_total_discount_item_price()
def get_final_price(self):
if self.item.discount_price:
return self.get_total_discount_item_price
return self.get_total_item_price
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
ordered = models.BooleanField(default=False)
items = models.ManyToManyField(OrderItem)
def __str__(self):
return self.user.username
def get_total(self):
total_sum = 0
for order_item in self.items.all():
total_sum += order_item.get_final_price()
return total_sum
发生错误
在您的 OrderItem
class 中,您的 get_final_price()
方法是 return 在一个函数中,而不是一个值。您需要 return 一个像这样的值,而不是 return 在函数中:
def get_final_price(self):
if self.item.discount_price:
discount_price = self.get_total_discount_item_price()
return discount_price
item_price = self.get_total_item_price()
return item_price
我也遇到了这个错误,因为我从来没有添加 @property
记得像这样添加@property
:
@property
def get_final_price(self):
if self.item.discount_price:
return self.get_total_discount_item_price
return self.get_total_item_price
https://docs.djangoproject.com/en/4.0/topics/db/models/#model-methods-1