IntegrityError at /api/order/create NOT NULL constraint fail



我试图通过Api请求与相关的键,产品和用户id的创建订单。但是得到一个错误,说它们不能为空,尽管它们不是空的

model.py

class Order(models.Model):
id = models.AutoField(primary_key=True)
product = models.ForeignKey(Product, related_name='product', on_delete=models.CASCADE, default = None)
user = models.ForeignKey(User, related_name='user', on_delete=models.CASCADE, default = None)
orderPrice = models.IntegerField(default=0)
status = models.CharField(max_length=255, default='Принят на обработку')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)

serializer.py

class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = ['id', 'product', 'user', 'status', 'orderPrice']
depth = 1

view.py

@api_view(['POST'])
def OrderCreateView(request):
order_serializer = OrderSerializer(data=request.data)
if order_serializer.is_valid(raise_exception=True):
order_serializer.save()
return JsonResponse(order_serializer.data, safe=False)

最后是我的API请求

{
"product": 1,
"user": 3,
"status": "Принят на обработку",
"orderPrice": 30000
}

这段代码工作了一段时间,但我做了一些改变,现在它得到一个错误。我试图迁移我所有的模型,并请求&;user_id&;;product_id&;。但是总是得到错误

你的代码的问题是你的序列化器,因为你提到一个depth为1,你在你的POST函数中发送一个JSON,一个连贯的JSON。json应该包含外键的所有属性,如下所示:

{
"product": {
...attributes of product
},
"user":  {
...attributes of user
},
"status": "Принят на обработку",
"orderPrice": 30000
}

您只需将product字段声明为可空,因为null默认为False:

class Order(models.Model):
[...]
product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True)
[...]

我还删除了related_name,因为要检索产品的顺序,您必须调用product.product。现在使用product.order检索它。

最新更新