我尝试将多个序列化器组合为一个,这样我就不必在前端对同一页面进行多次读取。看来我必须使用SerializerMethodField。
我的观点很简单:
@api_view(['GET'])
def get_user_profile_by_name(request, name):
try:
user_profile = UserProfile.objects.get(display_name=name.lower())
serializer = UserProfileSerializer(user_profile, many=False)
return Response(serializer.data)
except ObjectDoesNotExist:
message = {'detail': 'User does not exist or account has been suspended'}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
可以被匿名用户访问,所以我不能使用request.user我想在UserProfileSerializer中访问的所有模型都与UserProfile相关。所以我真的不知道如何设置序列化器。(我有更多的序列化器可以组合,但在本例中,我将其限制为序列化器中的一个序列化器)
class UserProfilePicture(serializers.ModelSerializer):
class Meta:
model = UserProfilePicture
fields = '__all__'
class UserProfileSerializer(serializers.ModelSerializer):
profile_picture = serializers.SerializerMethodField(read_only=True)
class Meta:
model = UserProfile
fields = '__all__'
def get_profile_picture(self, obj):
# What to do here ?
我很难理解如何访问"user_profile";为了查询正确的UserProfilePicture对象,并返回UserProfileSerializer内部组合的数据。
您没有显示您的模型,也没有描述UserProfile和UserProfilePicture之间的关系。但是,如果个人资料图片是UserProfile的一对一字段,则可以使用子序列化程序作为父序列化程序的字段:
class UserProfileSerializer(serializers.ModelSerializer):
profile_picture = UserProfilePicture(source='profile_picture', read_only=True)