Price()缺少1所需的位置参数:“自我”试图计算Django Rest框架中的价格

问题描述 投票:0回答:0

price()缺少1所需的位置参数:'self

我的型号:

class Order(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True) ordered_date = models.DateTimeField(auto_now_add=True) ordered = models.BooleanField(default=False) total_price = models.CharField(max_length=50,blank=True,null=True) #billing_details = models.OneToOneField('BillingDetails',on_delete=models.CASCADE,null=True,blank=True,related_name="order") def __str__(self): return self.user.email def price(self): total_item_price = self.quantity * self.item.varaints.price return total_item_price class OrderItem(models.Model): #user = models.ForeignKey(User,on_delete=models.CASCADE, blank=True #orderItem_ID = models.UUIDField(max_length=12, editable=False,default=str(uuid.uuid4())) orderItem_ID = models.CharField(max_length=12, editable=False, default=id_generator) order = models.ForeignKey(Order,on_delete=models.CASCADE, blank=True,null=True,related_name='order_items') item = models.ForeignKey(Product, on_delete=models.CASCADE,blank=True, null=True) order_variants = models.ForeignKey(Variants, on_delete=models.CASCADE,blank=True,null=True) quantity = models.IntegerField(default=1) total_item_price = models.PositiveIntegerField(blank=True,null=True,default=price()) ORDER_STATUS = ( ('To_Ship', 'To Ship',), ('Shipped', 'Shipped',), ('Delivered', 'Delivered',), ('Cancelled', 'Cancelled',), ) order_item_status = models.CharField(max_length=50,choices=ORDER_STATUS,default='To_Ship') lore dorditem模型本身中存在数量字段,但价格存在于变体模型中,该模型与这样的产品模型相关。 我尝试过的thins:

我尝试以价格删除括号(),但出现同样的错误。

如果我尝试将价格函数放入class模型之前,请说“ total_itel_price”字段,它说是在价格括号内需要的,如果我要自行=自=,我不知道要投入价格(self = ??)

其他模型:

Class Variants(models.Model): ...#other fields price = models.DecimalField(decimal_places=2, max_digits=20,default=500) Class Product(models.Model): ...#other fields variants = models.ManyToManyField(Variants,related_name='products') 我的序列化器:

    class OrderSerializer(serializers.ModelSerializer): billing_details = BillingDetailsSerializer() order_items = OrderItemSerializer(many=True) user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault()) class Meta: model = Order fields = ['id','user','ordered_date','order_status', 'ordered', 'order_items', 'total_price','billing_details'] # depth = 1 def create(self, validated_data): user = self.context['request'].user if not user.is_seller: order_items = validated_data.pop('order_items') billing_details = validated_data.pop('billing_details') order = Order.objects.create(user=user,**validated_data) BillingDetails.objects.create(user=user,order=order,**billing_details) for order_items in order_items: OrderItem.objects.create(order=order,**order_items) else: raise serializers.ValidationError("This is not a customer account.Please login as customer.")
  1. 任期代码:

class OrderItem(models.Model): #total_item_price = models.PositiveIntegerField(blank=True,null=True,default=0) #commented out this field other fields are same as above order_item_status = models.CharField(max_length=50,choices=ORDER_STATUS,default='To_Ship') @property def price(self): return self.quantity * self.item.varaints.price class OrderItemSerializer(serializers.ModelSerializer): order = serializers.PrimaryKeyRelatedField(read_only=True) price = serializers.ReadOnlyField() class Meta: model = OrderItem fields = ['id','order','orderItem_ID','item','order_variants', 'quantity','order_item_status','price'] # depth = 1

排序序列化器就像上面一样。它包括订购式序列化器,如下所示:

class OrderSerializer(serializers.ModelSerializer): billing_details = BillingDetailsSerializer() order_items = OrderItemSerializer(many=True) user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault()) class Meta: model = Order fields = ['id','user','ordered_date','order_status', 'ordered', 'order_items', 'total_price','billing_details']

订单toter_price计算订单。

这是我为total_price计算所做的,但是我在API响应中没有得到total_price字段,但是没有错误。 class Order(models.Model): .....#same fields as above @property def total_order_price(self): return sum([_.price for _ in self.order_items_set.all()]) 我在OrderItem模型中使用了价格函数,而我的OrderItem实例是order_items。问题是什么?

try这个

class Order(models.Model): """Stores the details of the order""" user: User = models.ForeignKey(User, on_delete=models.CASCADE, blank=True) ordered_date = models.DateTimeField(auto_now_add=True) ordered = models.BooleanField(default=False) # billing_details = models.OneToOneField('BillingDetails',on_delete=models.CASCADE,null=True,blank=True,related_name="order") def __str__(self) -> str: return self.user.email @property def total_price(self) -> int: """ Dropped the total price field and created it as property This is not the best practice, I am leaving that as practice for you :) """ return sum([_.total_item_price for _ in self.orderitem_set.all()]) class OrderItem(models.Model): """Order Item stores the details of the each order item""" orderItem_ID: str = models.CharField( max_length=12, editable=False, default=id_generator ) order: Order = models.ForeignKey( Order, on_delete=models.CASCADE, blank=True, null=True, related_name="order_items", ) item: Product = models.ForeignKey( Product, on_delete=models.CASCADE, blank=True, null=True ) order_variants: Variants = models.ForeignKey( Variants, on_delete=models.CASCADE, blank=True, null=True ) quantity: int = models.IntegerField(default=1) price = models.PositiveIntegerField() @property def total_item_price(self): """ Calculates total item price for the item Here you can also add additional logics such as taxes per item etc """ return self.price * self.quantity ORDER_STATUS = ( ("To_Ship", "To Ship"), ("Shipped", "Shipped"), ("Delivered", "Delivered"), ("Cancelled", "Cancelled"), ) order_item_status = models.CharField( max_length=50, choices=ORDER_STATUS, default="To_Ship" )


该代码最终用于订购价格计算: class OrderItem(models.Model): .....#fields same as above #total_item_price = models.PositiveIntegerField(blank=True,null=True,default=0) ORDER_STATUS = ( ('To_Ship', 'To Ship',), ('Shipped', 'Shipped',), ('Delivered', 'Delivered',), ('Cancelled', 'Cancelled',), ) order_item_status = models.CharField(max_length=50,choices=ORDER_STATUS,default='To_Ship') @property def price(self): total_item_price = self.quantity * self.order_variants.price return total_item_price

有变体中的错字。另外,我应该使用order_variants而不是项目。variants。因为项目有许多变体,但用户只选择一个具有唯一价格的变体。


django django-rest-framework postman save
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.