我在网上找不到这个问题的答案。也就是说,我是构建REST API的新手,可能会做一些根本不正确的事情。
我想做的是POST一个具有以下特征的JSON对象:
{
"groceryStoreVisit": 100,
"fruits": [
{"id":10, "type":"apple", "quantity":4},
{"id":20, "type":"orange", "quantity":3},
{"id":30, "type":"banana", "quantity":6}
],
"nuts": [
{"id":40, "type":"cashew", "no_bags":2},
{"id":50, "type":"peanut", "no_bags":4}
],
"bags": [
{"id":0, "type":"paper", "contents":[10,20,30]},
{"id":1, "type":"plastic", "contents":[40,50]}
]}
我的问题是,在尝试序列化数据时,我收到如下错误:
{“bags”:[{“fruits”:[“id = 10的对象不存在。”]}]}
我的 Bag 序列化类看起来像这样:
class BagSerializer(serializers.ModelSerializer):
contents = serializers.SlugRelatedField(many=True, queryset=Fruit.objects.all(), slug_field='id')
class Meta:
model = Bag
fields = ('id', 'type', 'contents')
我的 GroceryStoreVisit (整个对象)序列化类看起来像这样:
class GroceryStoreVisitSerializer(serializers.ModelSerializer):
fruits = FruitSerializer(many=True)
bags = BagSerializer(many=True)
class Meta:
model = GroceryStoreVisit
fields = ('groceryStoreVisit', 'fruits', 'nuts', 'bags')
def create(self, validated_data):
fruits_data = validated_data.pop('fruits')
nuts_data = validated_data.pop('nuts')
bags_data = validated_data.pop('bags')
groceryStoreVisit = GroceryStoreVisit.objects.create(**validated_data)
for fruit_data in fruits_data:
Fruit.objects.create(groceryStoreVisit=groceryStoreVisit, **fruit_data)
for nut_data in nuts_data:
Nut.objects.create(groceryStoreVisit=groceryStoreVisit, **nut_data)
for bag_data in bags_data:
Bag.objects.create(groceryStoreVisit=groceryStoreVisit, **bag_data)
return groceryStoreVisit
我不确定这是否足以提供有关我正在努力实现的内容的信息。模型或Fruit / Nut序列化器没什么奇特之处。请告诉我是否有任何我可以澄清的问题,以使问题定义更易于理解。
我想验证Bag内容是否存在于顶级GroceryStoreVisit对象中。我可以这样做吗?
感谢您的帮助!