【发布时间】:2021-06-24 14:19:03
【问题描述】:
我创建了一个订单创建 API,通过同时创建订单项目对象和账单明细对象来创建订单。几天前一切正常,但是当我今天尝试从邮递员调用订单 api 时,项目 ID 和 order_variants 在数据库中存储为 null,尽管我传递项目 ID 和变体 ID 并且对象也存在.
我正在发送这样的原始 JSON 数据。
如上所示,我已发送商品 id 和 order_varints 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.DateTimeField(auto_now_add=True)
order_status = models.CharField(max_length=50,choices=ORDER_STATUS,default='To_Ship')
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
class OrderItem(models.Model):
#user = models.ForeignKey(User,on_delete=models.CASCADE, blank=True)
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,)
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, on_delete=models.CASCADE, blank=True)
order = models.OneToOneField(Order, on_delete=models.CASCADE, blank=True, null=True, related_name='billing_details')
first_name = models.CharField(max_length=50,blank=True,null=True)
last_name = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(blank=True, null=True)
phone = models.CharField(max_length=50,blank=True,null=True)
city = models.CharField(max_length=50,blank=True,null=True)
address = models.CharField(max_length=100,blank=True,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', '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)
return order
else:
raise serializers.ValidationError("This is not a customer account.Please login as customer')
【问题讨论】:
标签: json django api django-rest-framework postman