2015-11-23 41 views
0

我使用Django 1.8和Django rest_framework 3.3.1。 我可以保存单个JSON数组,它可以工作。 但我想保存多个JSON数组。Django REST框架JSON数组职位

我已经找到了该请求的解决方案,ㅠ

我怎样才能拯救这个JSON阵列?

测试JSON阵列:

{ 
    "urllist": [ 
     { 
      "title": "20151123100000011", 
      "publisher": "01100101", 
      "link": "01100101.20151123100000011" 
     }, 
     { 
      "title": "20151123100000076", 
      "publisher": "01100101", 
      "link": "01100101.20151123100000076" 
     } 
     ] 
} 

型号:

class NewsUrl(models.Model): 
    link = models.CharField(max_length=100, primary_key=True) 
    title = models.TextField(default='') 
    publisher = models.CharField(max_length=150, blank=True, default='') 
    status = models.CharField(max_length=1, default='R') # R:Ready, W:Working, D:Done 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 

    def __str__(self): 
     return "NewsUrlList = [%s] %s" % (self.link, self.title) 

    class Meta: 
     ordering = ('created',) 

查看:

class NewsUrlList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView): 
    queryset = NewsUrl.objects.all() 
    serializer_class = NewsUrlSerializer 
    permission_classes = (IsAuthenticated,) 
    authentication_classes = (JSONWebTokenAuthentication,) 

    def get(self, request, *args, **kwargs): 
     return self.list(request, *args, **kwargs) 

    def post(self, request, *args, **kwargs): 
     return self.create(request, *args, **kwargs) 

串行:

class NewsUrlSerializer(serializers.Serializer): 
    link = serializers.CharField(required=True, max_length=100) 
    title = serializers.CharField(required=False, max_length=200) 
    publisher = serializers.CharField(required=False, max_length=10) 
    status = serializers.CharField(required=False, default='R') 

    def create(self, validated_data): 
     return NewsUrl.objects.create(**validated_data) 

    def update(self, instance, validated_data): 
     instance.status = validated_data.get('status', instance.status) 
     instance.save() 
     return instance 

回答

0

如果你想创建几个新的项目,你应该自己实例序列化,并添加参数many=True

0

关闭! 我有问题解决!谢谢大家。

def post(self, request, *args, **kwargs): 
    urls = request.data["urls"] 

    is_many = isinstance(urls, list) 
    if not is_many: 
     return super(NewsUrlList, self).create(request, *args, **kwargs) 
    else: 
     serializer = self.get_serializer(data=urls, many=True) 
     serializer.is_valid(raise_exception=True) 
     self.create_list(serializer) 
     return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) 

def create_list(self, serializer): 
    for new_link in serializer.data: 
     NewsUrl.objects.create(**new_link)