我正在使用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
答案 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)