使用Django Rest Framework的ListSerializer批量创建 [英] bulk create using ListSerializer of Django Rest Framework

查看:113
本文介绍了使用Django Rest Framework的ListSerializer批量创建的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用Django Rest Framework为某个表批量创建行.我在文档中看到了DRF支持它.

Iam trying to bulk create rows for a certain table using Django Rest Framework. I see in the documentation that DRF supports it.

views.py

class UserProfileFeedViewSet(viewsets.ModelViewSet):
    """Handles creating, reading and updating profile feed items."""

    authentication_classes = (TokenAuthentication,)
    queryset = models.ProfileFeedItem.objects.all()
    serializer_class = serializers.ProfileFeedItemSerializer(queryset, many=True)
    permission_classes = (permissions.PostOwnStatus, IsAuthenticated)

    def perform_create(self, serializer):
        """Sets the user profile to the logged in user."""

        serializer.save(user_profile=self.request.user)

serializers.py

serializers.py

class ProfileFeedItemListSerializer(serializers.ListSerializer):
   def create(self,validated_data):
       feed_list = [ProfileFeedItem(**item) for item in validated_data]
       return ProfileFeedItem.objects.bulk_create(feed_list)

class ProfileFeedItemSerializer(serializers.ModelSerializer):
    """A serializer for profile feed items."""

    class Meta:
        model = models.ProfileFeedItem
        list_serializer_class = ProfileFeedItemListSerializer
        fields = ('id', 'user_profile', 'status_text', 'created_on')
        extra_kwargs = {'user_profile': {'read_only': True}}

当我尝试使用管理表单发布信息时,我总是会收到此错误.您能帮我确定我在做什么错吗?

When i try posting using admin form i always get this error. Can you please help me identify what am i doing wrong here ?

/api/feed/'ProfileFeedItemListSerializer'对象中的

TypeError不是可调用的请求方法:GET请求网址: http://127.0.0.1:8080/api/feed/ Django版本:1.11例外类型:TypeError异常值:'ProfileFeedItemListSerializer'对象不可调用异常位置:/home/ubuntu/.virtualenvs/profiles_api/local/lib/python3.5/site-packages/rest_framework/generics.py在get_serializer中,第111行Python可执行文件:/home/ubuntu/.virtualenvs/profiles_api/bin/python Python版本:3.5.2

TypeError at /api/feed/ 'ProfileFeedItemListSerializer' object is not callable Request Method: GET Request URL: http://127.0.0.1:8080/api/feed/ Django Version: 1.11 Exception Type: TypeError Exception Value: 'ProfileFeedItemListSerializer' object is not callable Exception Location: /home/ubuntu/.virtualenvs/profiles_api/local/lib/python3.5/site-packages/rest_framework/generics.py in get_serializer, line 111 Python Executable: /home/ubuntu/.virtualenvs/profiles_api/bin/python Python Version: 3.5.2

推荐答案

尝试一下:

def create(self, request, *args, **kwargs):
    many = isinstance(request.data, list)
    serializer = self.get_serializer(data=request.data, many=many)
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, headers=headers)

def perform_create(self, serializer):
    if type(serializer.validated_data) == list:
         for item in serializer.validated_data:
              item.update({'user_profile': self.request.user})
    else:
        serializer.validated_data.update({'user_profile': self.request.user})
    serializer.save()

不幸的是,现在我无法检查解决方案,但也许会给出正确的方法

unfortunately now I can't check the solution, but maybe it will give right way

这篇关于使用Django Rest Framework的ListSerializer批量创建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆