[英]How to serialize a list of objects?
Django-Rest-Framework 文檔 ( https://www.django-rest-framework.org/api-guide/serializers/ ) 提供了以下用於序列化對象列表的示例:
queryset = Book.objects.all()
serializer = BookSerializer(queryset, many=True)
serializer.data
我嘗試使用以下代碼執行類似操作:
@api_view(['GET'])
def postComments(request, pk):
"""
Retrieve all comments with originalPostId = pk.
"""
if request.method == 'GET':
comments = Comment.objects.all()
comments = comments.filter(originalPostId = pk)
serializer = CommentSerializer(comments, many=True)
if serializer.is_valid():
return Response(serializer.data)
logger.error(serializer.errors)
但是,立即出現以下錯誤: AssertionError: Cannot call `.is_valid()` as no `data=` keyword argument was passed when instantiating the serializer instance.
另一篇文章( django-rest-framework:無法調用`.is_valid()`,因為在實例化序列化器實例時沒有傳遞`data=`關鍵字參數)似乎解決了這個問題,但答案表明在調用時放入data=
我的CommentSerializer
將用於反序列化而不是序列化,這不是我想要的。
但是,當我使用serializer = CommentSerializer(data=comments, many=True)
行運行時serializer = CommentSerializer(data=comments, many=True)
我收到錯誤{'non_field_errors': [ErrorDetail(string='Expected a list of items but got type "QuerySet".', code='not_a_list')]}
這是我的序列化程序,以防萬一:
poster = UserSerializer()
community = CommunitySerializer()
originalPost = PostSerializer()
class Meta:
model = Comment
fields = ['post', 'community', 'poster', 'originalPost', 'originalPostId']
def create(self, validated_data):
userData = validated_data.pop('poster')
user = User.objects.get_or_create(username=userData['username'],
email=userData['email'],
first_name=userData['first_name'],
last_name=userData['last_name'],
password=userData['password'])[0]
validated_data['poster'] = user
communityData = validated_data.pop('community')
community = Community.objects.get_or_create(name=communityData['name'])[0]
validated_data['community'] = community
originalPostData = validated_data.pop('originalPost')
originalPost = Post.objects.get_or_create(id = validated_data['originalPostId'])[0]
validated_data['originalPost'] = originalPost
comment = Comment.objects.create(**validated_data)
return comment```
@api_view(['GET'])
def postComments(request, pk):
"""
Retrieve all comments with originalPostId = pk.
"""
if request.method == 'GET':
comments = Comment.objects.all()
comments = comments.filter(originalPostId = pk)
serializer = CommentSerializer(comments, many=True)
return Response(serializer.data)
擺脫is_valid()
檢查使它起作用。 我想我只需要相信自己吧~
is_valid 用於驗證用戶輸入數據,因此無需調用 is_valid。
@api_view(['GET'])
def postComments(request, pk):
"""
Retrieve all comments with originalPostId = pk.
"""
if request.method == 'GET':
comments = Comment.objects.filter(originalPostId = pk).all()
serializer = CommentSerializer(comments, many=True)
return Response(serializer.data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.