【问题标题】:I get this error unsupported operand type(s) for -: 'method' and 'int'我收到此错误 unsupported operand type(s) for -: 'method' and 'int'
【发布时间】:2020-12-27 21:18:49
【问题描述】:

我想将 available_quantity 减去 total_quantity 。但是我得到这个错误我该如何解决它

class Order(models.Model):

 product = models.ForeignKey(Product, on_delete=models.CASCADE)
 category = models.ForeignKey(Category, on_delete=models.CASCADE)
 brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
 distribute_price = models.IntegerField()
 mrp_price = models.IntegerField(null=True)
 created_at = models.DateTimeField(auto_now_add=True)
 user_give_quantity = models.IntegerField(null=True)
 user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)

 def __str__(self):
    return self.product.item_name

 def aaa_qqq(self):
    return self.mrp_price * self.user_give_quantity    

 def available_quantity(self):
    return self.product.quantity - self.user_give_quantity if all([self.product, 
           self.product.quantity, self.user, self.user_give_quantity]) else 0


 def total_quantity(self):
    return self.available_quantity - self.user_give_quantity

【问题讨论】:

    标签: python django typeerror


    【解决方案1】:

    发生这种情况的原因是因为self.available_quantity 是一个方法,而不是一个属性。因此,您应该调用该方法:

    def total_quantity(self):
        return self.available_quantity() - self.user_give_quantity

    请注意,如果 user_give_quantityNULL/None,那么这也会引发错误。因此,您应该检查这一点,例如:

    def total_quantity(self):
        if self.user_give_quantity is not None:
            return self.available_quantity() - self.user_give_quantity

    如果self.user_give_quantityNone,那么total_quantity() 将返回None

    您可能还想清理available_quantity

    def available_quantity(self):
        if self.product and self.product.quantity and self.user and self.user_give_quantity is not None:
            return self.product.quantity - self.user_give_quantity
        return 0

    此外,我并不完全清楚 available_quantity 将如何在这里工作:如果有 多个 Orders 每个都需要一些数量,那么您通常需要将数量相加所有订单,这里只关注特定订单的数量。

    您也可以使用@property decorator [python-doc] 将这些定义为属性,然后您可以使用self.available_quantity

    class Order(models.Model):
        product = models.ForeignKey(Product, on_delete=models.CASCADE)
        category = models.ForeignKey(Category, on_delete=models.CASCADE)
        brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
        distribute_price = models.IntegerField()
        mrp_price = models.IntegerField(null=True)
        created_at = models.DateTimeField(auto_now_add=True)
        user_give_quantity = models.IntegerField(null=True)
        user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
    
        def __str__(self):
            return self.product.item_name
    
        @property
        def aaa_qqq(self):
            return self.mrp_price * self.user_give_quantity    
    
        @property
        def available_quantity(self):
            if self.product and self.product.quantity and self.user and self.user_give_quantity is not None:
                return self.product.quantity - self.user_give_quantity
            return 0
    
        @property
        def total_quantity(self):
            if self.user_give_quantity is not None:
                return self.available_quantity - self.user_give_quantity

    【讨论】:

    • 为了完整起见,您还可以使用 available_quantity 上的属性装饰器来使不带括号的语法起作用。
    猜你喜欢
    • 2021-03-27
    • 2020-04-14
    • 2020-04-04
    • 2016-08-30
    • 1970-01-01
    • 2020-03-15
    • 2021-12-25
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多