Как сериализовать несколько моделей в одном сериализаторе в Django?
Я пытаюсь объединить несколько сериализаторов в один, чтобы не делать многократную выборку на фронт-энде для одной и той же страницы. Похоже, что я должен использовать 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 " из UserProfileSerializer, чтобы запросить правильный объект UserProfilePicture и вернуть данные, объединенные внутри UserProfileSerializer.
Вы не показали свои модели и не описали отношения между UserProfile и UserProfilePicture. Но если картинка профиля является полем UserProfile один-к-одному, вы можете использовать дочерний сериализатор как поле родительского сериализатора:
class UserProfileSerializer(serializers.ModelSerializer):
profile_picture = UserProfilePicture(source='profile_picture', read_only=True)