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 的客户。