Django REST框架-反序列化和解析不同对象的JSON列表

时间:2019-07-25 12:23:41

标签: json django-rest-framework deserialization json-deserialization

我是Django Rest框架的新手,我需要解析以下类型的数据:

[
  {
    "Fruit": {
      "id": 1,
      "name": "apple"
    }
  },
  {
    "Vegetable": {
      "id": 4,
      "name": "carrot"
    }
  },
  {
    "Fruit": {
      "id": 2,
      "name": "orange"
    }
  }
]

我创建了模型

class Fruit(models.Model):
    name = models.CharField(max_length=15)

class Vegetable(models.Model):
    name = models.CharField(max_length=15)

和序列化器:

class FruitSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Fruit
        fields = ('id', 'name')

# + VegetableSerializer - very alike

是否可以创建另一个能够解析给定JSON数据的序列化器 并将它们存储到数据库中? 到目前为止,我的解决方法是:

@api_view(['POST'])
@parser_classes([JSONParser])
def import_view(request, format=None):
    if request.method == 'POST':
        if request.content_type != 'application/json':
            return Response("Content type not valid", status=status.HTTP_400_BAD_REQUEST)

        loaded_data = request.data
        # do stuff with loaded_data

其中loaded_data是词典列表,而loaded_data中的一项如下所示:

list_item = {
    'Fruit': {'id': 1, 'name': 'apple'}
}

然后我创建一个序列化器并保存数据:

data = list_item['Fruit']
obj = FruitSerializer(data=data)
obj.is_valid()
obj.save()
# Alternatively I used something like obj.save(id=data['id']) to save
# the object with desired ID.

我不知道这是否是一个好方法,所以我很感谢任何关于如何 解决这类问题。

0 个答案:

没有答案