我试图使用Django Rest Framework为某个表批量创建行。我在文档中看到DRF支持它。
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)
Run Code Online (Sandbox Code Playgroud)
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}}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用管理表单发布信息时,我总是会收到此错误。您能帮我确定我在做什么错吗?
/ api / feed /'ProfileFeedItemListSerializer'对象的TypeError不可调用请求方法:GET请求URL:http : //127.0.0.1 : 8080 /api/feed/ Django版本:1.11异常类型:TypeError异常值:'ProfileFeedItemListSerializer'对象不可调用异常位置:get_serializer中的第111行Python可执行文件:/home/ubuntu/.virtualenvs/profiles_api/local/lib/python3.5/site-packages/rest_framework/generics.py:可执行文件:/home/ubuntu/.virtualenvs/profiles_api / bin / python Python版本: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()
Run Code Online (Sandbox Code Playgroud)
不幸的是,现在我无法检查解决方案,但是也许它将给出正确的方法
| 归档时间: |
|
| 查看次数: |
2153 次 |
| 最近记录: |