Django REST框架JSON数组发布

时间:2015-11-23 08:23:36

标签: django django-rest-framework

我正在使用Django 1.8和Django rest_framework 3.3.1。 我可以保存一个JSON数组,它可以工作。 但我想保存多个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

1 个答案:

答案 0 :(得分: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)