Django rest 插入顺序
Django rest insert order
我正在使用其余框架在 Django 中做一个小项目,我已经到了我真的不知道如何继续的地步。
在应用程序中,我的客户可以订购食物或饮料,然后将其添加到订单中。我有以下型号:
订单
order_id = models.AutoField(primary_key = True)
customer = models.ForeignKey(Customers, on_delete = None)
date = models.DateTimeField(auto_now_add=True)
Customers 模型只是 User 模型中的一个 OneToOneField。
食品订单
fake_id = models.AutoField(primary_key = True)
order_id = models.ForeignKey(Orders, on_delete = models.CASCADE)
food_id = models.ForeignKey(Food, on_delete = models.CASCADE)
quantity = models.IntegerField()
饮料订单
fake_id = models.AutoField(primary_key = True)
order_id = models.ForeignKey(Orders, on_delete = models.CASCADE)
drink_id = models.ForeignKey(Drink, on_delete = models.CASCADE)
quantity = models.IntegerField()
考虑到我的模型,首先我需要创建一个订单,然后为订单中的每个项目创建一个食物订单或饮料订单。我遇到的问题是我什至无法创建订单。我创建了一个序列化器和一个视图,用邮递员传递数据,但什么也没有,我总是得到一个错误。
我的序列化器:
class OrdersSerializer(serializers.Serializer):
customer = UserSerializer()
date = serializers.DateTimeField()
class Meta:
model = Orders
def create(self, validated_data):
order = Orders.objects.create(**validated_data)
order.save()
return order
我的看法:
@api_view(['POST'])
def createOrder(request):
ser = OrdersSerializer(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data, status=status.HTTP_201_CREATED)
else:
return Response(ser._errors, status=status.HTTP_400_BAD_REQUEST)
这是我要发送的负载:
{
"date": [{
"date": "2013-01-29T12:34:56.000000Z"
}],
"customer": {
"id": [{
"id":1
}]
}
}
这是我得到的回复:
{
"customerID": {
"id": [
"A valid integer is required."
]
},
"date": [
"Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]."
]
}
我觉得可能是payload的问题,但我真的一直在努力让它工作,但无济于事。
好像你的payload多了一层嵌套...应该是
{
"date": "2013-01-29T12:34:56.000000Z",
"customer": {
"id":1
}
}
这应该类似于 ser.data
的输出
附带说明一下,如果这些是您的实际模型,您可能希望重命名 ForeignKey 字段使其没有 _id
后缀...
Django 会自动创建一个带有 _id
的隐藏字段(在你的例子中是 order_id_id
),这是 db 字段,没有 _id
后缀的字段名称将是一个实际的模型对象。因此,在您的情况下 order_id
将是一个 Order 对象,而不是 id。这可能会造成混淆。
负载格式不正确。这应该是正确的格式:
{
"customer": { "id": 1 },
"date": "2018-09-04 06:00:00.000000+05:30"
}
此外,您需要确保数据库中存在 id=1
的客户。
我正在使用其余框架在 Django 中做一个小项目,我已经到了我真的不知道如何继续的地步。
在应用程序中,我的客户可以订购食物或饮料,然后将其添加到订单中。我有以下型号:
订单
order_id = models.AutoField(primary_key = True)
customer = models.ForeignKey(Customers, on_delete = None)
date = models.DateTimeField(auto_now_add=True)
Customers 模型只是 User 模型中的一个 OneToOneField。
食品订单
fake_id = models.AutoField(primary_key = True)
order_id = models.ForeignKey(Orders, on_delete = models.CASCADE)
food_id = models.ForeignKey(Food, on_delete = models.CASCADE)
quantity = models.IntegerField()
饮料订单
fake_id = models.AutoField(primary_key = True)
order_id = models.ForeignKey(Orders, on_delete = models.CASCADE)
drink_id = models.ForeignKey(Drink, on_delete = models.CASCADE)
quantity = models.IntegerField()
考虑到我的模型,首先我需要创建一个订单,然后为订单中的每个项目创建一个食物订单或饮料订单。我遇到的问题是我什至无法创建订单。我创建了一个序列化器和一个视图,用邮递员传递数据,但什么也没有,我总是得到一个错误。
我的序列化器:
class OrdersSerializer(serializers.Serializer):
customer = UserSerializer()
date = serializers.DateTimeField()
class Meta:
model = Orders
def create(self, validated_data):
order = Orders.objects.create(**validated_data)
order.save()
return order
我的看法:
@api_view(['POST'])
def createOrder(request):
ser = OrdersSerializer(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data, status=status.HTTP_201_CREATED)
else:
return Response(ser._errors, status=status.HTTP_400_BAD_REQUEST)
这是我要发送的负载:
{
"date": [{
"date": "2013-01-29T12:34:56.000000Z"
}],
"customer": {
"id": [{
"id":1
}]
}
}
这是我得到的回复:
{
"customerID": {
"id": [
"A valid integer is required."
]
},
"date": [
"Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]."
]
}
我觉得可能是payload的问题,但我真的一直在努力让它工作,但无济于事。
好像你的payload多了一层嵌套...应该是
{
"date": "2013-01-29T12:34:56.000000Z",
"customer": {
"id":1
}
}
这应该类似于 ser.data
附带说明一下,如果这些是您的实际模型,您可能希望重命名 ForeignKey 字段使其没有 _id
后缀...
Django 会自动创建一个带有 _id
的隐藏字段(在你的例子中是 order_id_id
),这是 db 字段,没有 _id
后缀的字段名称将是一个实际的模型对象。因此,在您的情况下 order_id
将是一个 Order 对象,而不是 id。这可能会造成混淆。
负载格式不正确。这应该是正确的格式:
{
"customer": { "id": 1 },
"date": "2018-09-04 06:00:00.000000+05:30"
}
此外,您需要确保数据库中存在 id=1
的客户。