程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null?

开发过程中遇到在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null的问题如何解决?下面主要结合日常开发的经验,给出你关于在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null的解决方法建议,希望对你解决在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null有所启发或帮助;

我创建了一个订单创建 API,我通过同时创建订单商品对象和账单明细对象来创建订单。几天前一切正常,但是当我今天尝试从邮递员那里调用订单 API 时,项目 ID 和 order_variants 在数据库中存储为 null,尽管我正在传递项目 ID 和变体 ID,并且对象也存在.

我正在发送这样的原始 JsON 数据。

在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null

我已经发送了如上所示的商品 ID 和 order_variants ID。但是我得到的结果是空的,如下所示。

在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null

我的模型:

class Order(models.Model):
    ORDER_STATUS = (
        ('To_Ship','To Ship',),('Shipped','Shipped',('Delivered','Delivered',('Cancelled','Cancelled',)
    user = models.ForeignKey(User,on_delete=models.CASCADE,blank=TruE)
    #items = models.ManyToManyFIEld(OrderItem,blank=True,null=True,related_name="order_items")
    #start_date = models.datetiR_419_11845@eFIEld(auto_Now_add=TruE)
    order_status = models.CharFIEld(max_length=50,choices=ORDER_STATUS,default='To_Ship')

    ordered_date = models.datetiR_419_11845@eFIEld(auto_Now_add=TruE)
    ordered = models.BooleanFIEld(default=falsE)
    @R_212_10586@l_price = models.CharFIEld(max_length=50,null=TruE)
    #billing_details = models.OnetoOneFIEld('BillingDetails',related_name="order")

    def __str__(self):
        return self.user.email 

class OrderItem(models.Model):
    #user = models.ForeignKey(User,blank=TruE)
    order = models.ForeignKey(Order,related_name='order_items')
    item = models.ForeignKey(Product,null=TruE)
    order_variants = models.ForeignKey(Variants,null=TruE)
    quantity = models.IntegerFIEld(default=1)    
    @R_212_10586@l_item_price = models.PositiveIntegerFIEld(blank=True,)
    

    def __str__(self):
        return f"{self.quantity} items of {self.item} of {self.order.user}"

    class Meta:
        verbose_name_plural = "Cart Items"
        ordering = ('-ID',)

class BillingDetails(models.Model):
    
    user = models.ForeignKey(User,blank=TruE)
    order = models.OnetoOneFIEld(Order,related_name='billing_details')
    first_name = models.CharFIEld(max_length=50,null=TruE)
    last_name = models.CharFIEld(max_length=50,null=TruE)
    email = models.EmailFIEld(blank=True,null=TruE)
    phone = models.CharFIEld(max_length=50,null=TruE)    
    city = models.CharFIEld(max_length=50,null=TruE)
    address = models.CharFIEld(max_length=100,null=TruE)

我的观点:

class AddtoOrderItemVIEw(ListCreateAPIVIEw):
    permission_classes = [IsAuthenticated]
    queryset = Order.objects.all()
    serializer_class = orderserializer

我的序列化程序:

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','@R_212_10586@l_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)
        
        return order
    else:
        raise serializers.ValIDationError("This is not a customer account.Please login as customer')
   

解决方法

看起来一切正常。我在这里唯一发现犯规的是

for order_items in order_items:
    OrderItem.objects.create(order=order,**order_items)

我想纠正这个应该可行

for order_item in order_items:
    OrderItem.objects.create(order=order,**order_item)
,

是因为分配给 OrderItemserializer 的深度 = 1。如果删除,它会工作得很好。

我更新的序列化程序:

class OrderItemserializer(serializers.Modelserializer):    
    class Meta:
        model = OrderItem
        fields = ['id','item','order_variants','order','quantity','order_item_status','@R_212_10586@l_item_price']
        # depth = 1

大佬总结

以上是大佬教程为你收集整理的在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null全部内容,希望文章能够帮你解决在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。