Сериализаторы HyperlinkModelSerializers не отрисовывают вложенные модели
У меня есть модель пользователей и групп, которая по умолчанию поставляется с Django. Я пытаюсь показать группу, вложенную в пользователей. Когда я использую serializers.ModelSerializer
, все работает нормально, но чтобы добавить URL, я обновил его до serializers.HyperlinkedModelSerializer
, и тогда он выдает следующую ошибку:
`HyperlinkedIdentityField` requires the request in the serializer context. Add `context={'request': request}` when instantiating the serializer.
Код модели
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('id', 'name', 'url')
class UserSerializer(serializers.HyperlinkedModelSerializer):
groups = serializers.PrimaryKeyRelatedField(many=True, queryset=Group.objects.all())
class Meta:
model = get_user_model()
fields = ('id', 'email', 'password', 'name', 'is_active', 'is_verified', 'groups', 'url')
def create(self, validated_data):
groups_data = validated_data.pop('groups')
user = get_user_model().objects.create(**validated_data)
for group_data in groups_data:
user.groups.add(group_data)
return user
def to_representation(self, instance):
rep = super(UserSerializer, self).to_representation(instance)
rep.update({
'groups': GroupSerializer(many=True).to_representation(instance.groups)
})
return rep
С помощью serializers.ModelSerializer
я получаю результат ниже, но как я могу добавить URL с пользователем и группой?
{
"id": 4,
"email": "admin3@admin.com",
"password": "12345678",
"name": "admin3",
"is_active": false,
"is_verified": false,
"groups": [
{
"id": 1,
"name": "test"
}
]
},
Как объясняет ошибка, HyperlinkedModelSerializer
требует request
добавления контекста при инстанцировании.
Больше информации в документации: https://www.django-rest-framework.org/api-guide/serializers/#hyperlinkedmodelserializer