大佬教程收集整理的这篇文章主要介绍了在 django rest 框架中创建订单时,项目 id 和 order_variants id 存储为 null,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个订单创建 API,我通过同时创建订单商品对象和账单明细对象来创建订单。几天前一切正常,但是当我今天尝试从邮递员那里调用订单 API 时,项目 ID 和 order_variants 在数据库中存储为 null,尽管我正在传递项目 ID 和变体 ID,并且对象也存在.
我正在发送这样的原始 JsON 数据。
我已经发送了如上所示的商品 ID 和 order_variants ID。但是我得到的结果是空的,如下所示。
我的模型:
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,请注明来意。