python - Django:将 JSON POST 数据添加到数据库中
问题描述
我正在尝试为屠夫制作 API。有了这个API和我接下来要搭建的网站,客户就可以远程下单了。这是我的问题。使用订单,客户端向我发送 JSON 数据,如下所示:
{
"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
class order(models.Model):
user = models.ForeignKey(memberArea, on_delete=models.CASCADE)
comment = models.TextField(null=True, blank=True)
orderDay = models.DateTimeField(auto_now_add=True)
deliveryDay = models.DateField()
deliveryAddress = models.CharField(max_length=255)
state = models.CharField(max_length=255)
price = models.TextField(null=True, blank=True)
response = models.TextField(null=True, blank=True)
class orderDetail(models.Model):
order = models.ForeignKey(order, on_delete=models.CASCADE)
product = models.ForeignKey(product, on_delete=models.CASCADE)
byProduct = models.ForeignKey(byProduct, on_delete=models.CASCADE)
quantity = models.CharField(max_length=255)
class product(models.Model):
name = models.CharField(max_length=255)
prix_uni = models.TextField(null=True, blank=True)
prix_kg = models.TextField(null=True, blank=True)
dispo = models.BooleanField(null=True, blank=True)
category = models.ForeignKey(category, on_delete=models.CASCADE)
redu = models.TextField(null=True, blank=True)
class byProduct(models.Model):
product = models.ForeignKey(product, on_delete = models.CASCADE)
name = models.CharField(max_length=255)
我制作了一个像这样的序列化程序文件serializer.py
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
这是我的观点:views.py:
#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."
]
}
]
}
我不知道如何添加它,因为我需要的 order_id 是在 orderDetail.xml 的同时创建的。预先感谢您帮助我。
解决方案
你应该order
在readonly
:orderDetailSerializer
class orderDetailSerializer(serializers.ModelSerializer):
class Meta:
model = orderDetail
fields = '__all__'
read_only_fields = ('order',)
推荐阅读
- python - Tensorflow:map_fn 在训练期间在 Graph 模式下不起作用,在 Eager 模式下它可以
- c# - 如何在 Dot Net Core 中编写和检查 cookie
- python - 来回循环 Python
- php - 如何在php中从服务器获取日期和时间
- java - 如何使用 Java 从日志文件中提取 sql 查询行?
- angular - Ionic 4 - 如何使用 navCtrl 或路由器服务在页面之间传递数据
- c++ - 在我的项目中包含 C++ 库的最佳实践
- javascript - 如何从服务器响应中提取 JWT 令牌?
- reactjs - 在 React 渲染之前等待多个异步调用完成
- kubernetes - 无法分配 Pod 并出现 FailedScheduling 错误