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