Python Django:将JSON POST数据添加到数据库中
我正在为一个屠夫制作一个API。 有了这个API和我将在下一个月建立的网站,客户将能够远程下订单。 这是我的问题。 通过订单,客户机向我发送JSON数据,如下所示:Python Django:将JSON POST数据添加到数据库中,python,json,django,api,django-rest-framework,Python,Json,Django,Api,Django Rest Framework,我正在为一个屠夫制作一个API。 有了这个API和我将在下一个月建立的网站,客户将能够远程下订单。 这是我的问题。 通过订单,客户机向我发送JSON数据,如下所示: { "user": 8, "orderDay": "2020-06-24", "deliveryDay": "2020-06-30", "deliveryAddress": &quo
{
"user": 8,
"orderDay": "2020-06-24",
"deliveryDay": "2020-06-30",
"deliveryAddress": "Place des Fêtes",
"comment": "",
"orderDetail":
[
{
"product": 2,
"byProduct": 2,
"quantity": 43
},
{
"product": 3,
"byProduct": 3,
"quantity": 5
}
]
}
这些数据必须保存在数据库中。
以下是我使用的模型:models.py
我创建了一个类似于serializer.py的序列化程序文件
这是我的视图:views.py:
当我尝试运行代码时,它告诉我缺少订单数据:
{
"orderDetail": [
{
"order": [
"This field is required."
]
},
{
"order": [
"This field is required."
]
}
]
}
我不知道如何添加它,因为我需要的order_id是在orderDetail创建的同时创建的。
提前感谢您的帮助。您应该在orderDetailSerializer中将订单字段设置为只读:
您应该在orderDetailSerializer中将order字段设置为只读:
当我将此字段设置为只读时,我得到以下错误:AssertionError:关系字段在设置为只读=True时不应提供queryset`参数。`you da real mvp:D当我将此字段设置为只读时,我得到以下错误:AssertionError:关系字段在设置为只读=True时不应提供queryset`参数。`you da real mvp:D
class orderDetailSerializer(serializers.ModelSerializer):
order = serializers.PrimaryKeyRelatedField(many=False, queryset = order.objects.all())
class Meta:
model = orderDetail
fields = '__all__'
class OrderSerializer(serializers.ModelSerializer):
orderDetail = orderDetailSerializer(many=True)
class Meta:
model = order
fields = ['user', 'comment', 'deliveryAddress', 'deliveryDay', 'orderDetail']
def create(self, validated_data):
order_detail_data = validated_data.pop('orderDetail')
new_order = order.objects.create(**validated_data)
new_order.save()
for product in order_detail_data:
order_detail = orderDetail.objects.create(order=new_order, **product)
new_order.orderDetail.add(order_detail.id)
return new_order
#Make an order
@api_view(['POST'])
def order(request, format=None):
if request.method == 'POST':
serializer = OrderSerializer(data=request.data)
data = {}
if serializer.is_valid():
serializer.save()
data['response'] = "Your order went well"
return Response(data)
return Response(serializer.errors)
{
"orderDetail": [
{
"order": [
"This field is required."
]
},
{
"order": [
"This field is required."
]
}
]
}
class orderDetailSerializer(serializers.ModelSerializer):
class Meta:
model = orderDetail
fields = '__all__'
read_only_fields = ('order',)