Django REST框架 - 嵌套对象列表之间的关系

时间:2015-10-08 20:22:14

标签: python json django rest

我在网上找不到这个问题的答案。也就是说,我是构建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对象中。我可以这样做吗?

感谢您的帮助!

0 个答案:

没有答案