【发布时间】:2020-10-25 03:02:10
【问题描述】:
我需要用 django 处理一些 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
}
]
}
我想将此数据保存在 3 个不同的表中:order 和 orderDetail。 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()
deliveryPlace = 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.ManyToManyField(byProduct)
quantity = models.CharField(max_length=255)
...
class byProduct(models.Model):
product = models.ForeignKey(product, on_delete = models.CASCADE)
name = 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)
我没有找到任何关于如何使用 Django 处理 JSON 数据的好的文档。 提前致谢
更新
我尝试过这样的事情: serializer.py:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = product
fields = '__all__'
class ByProductSerializer(serializers.ModelSerializer):
class Meta:
model = byProduct
fields = '__all__'
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', 'deliveryDay', 'deliveryAddress', '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(**product)
order_detail.order.add(new_order.id)
return new_order
views.py:
@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)
【问题讨论】:
-
与您之前处理请求的方式相同。根据您发布的示例数据,您需要
nested serializers。看看here,这不完全适合您的数据,但您会知道如何继续。 -
另外,如果您想要答案,请确保发布所有相关模型,这样很容易尝试。例如,
byProduct丢失。 -
谢谢,我会检查你的链接!我已经用副产品模型更新了我的帖子
-
@neferpitou 我试图在你的链接中做类似的事情,我已经用我的更新更新了我的帖子,但不幸的是,它暂时不起作用......
-
productmodel add that also, 之后我会尝试为模型添加相关的序列化程序。
标签: python json django django-rest-framework django-serializer