【问题标题】:Django unsupported operand type(s) for +=: 'int' and 'method'+= 的 Django 不支持的操作数类型:“int”和“method”
【发布时间】:2022-01-26 09:57:13
【问题描述】:

我试图在我的电子商务网站中实现一个简单的逻辑,我将通过循环订单并在 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

发生的错误

【问题讨论】:

    标签: python-3.x django django-models


    【解决方案1】:

    在您的OrderItem 类中,您的get_final_price() 方法返回的是一个函数,而不是一个值。您需要返回一个像这样的值,而不是返回一个函数:

    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
    

    【讨论】:

    • 添加您提供的代码后,我仍然遇到同样的错误
    • 能否去掉 discount_price 条件,只返回 item_price 进行测试,看看是否有效?
    • 已删除,但错误仍然相同
    • 您能否仅使用 item_price 尝试我的更新答案?我刚刚注意到我在函数调用中缺少 ()。
    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多