Django HyperlinkedModelSerializer на таблице, имеющей поле, помеченное как pk + fk

У меня есть таблица, в которой есть поле, отмеченное как первичный ключ, хотя оно также является внешним ключом. Это не идеально, но в данный момент нужно с этим разобраться.

class Profile(models.Model):

    class Meta:
        verbose_name_plural = "Profiles"
        
    member = models.OneToOneField(
        Member,
        on_delete=models.CASCADE,
        primary_key=True,
    )

    ...

Теперь у меня есть сериализатор django-rest-framework для моделей Member и Profile, который выглядит следующим образом,

class MemberSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
       model = Member
       fields = ('id', 'role_id', 'user_id')
       
class MemberProfileSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
       model = Profile
       fields = ['member_id','bio','address','mobile'] 

Вопрос заключается в том, что когда я извлекаю 'member_id' из MemberProfileSerializer, он правильно перечисляет id (это id, который является пк для Profile, и также является пк для таблицы Member)

Но если мне нужно извлечь больше информации из модели Member, и для этого добавить ссылку на MemberSerializer, то в результатах я получаю обратно пустой объект!

class MemberProfileSerializer(serializers.HyperlinkedModelSerializer):

    member_id = MemberSerializer()
    class Meta:
       model = Profile
       fields = ['member_id','bio','address','mobile']

enter image description here

Далее, если я добавлю запись HyperlinkedRelatedField для member_id,

class MemberProfileSerializer(serializers.HyperlinkedModelSerializer):

        member_id = serializers.HyperlinkedRelatedField(
            view_name = 'member-detail',
            lookup_field='id',
            read_only=True)
            
        class Meta:
           model = Profile
           fields = ['member_id','bio','address','mobile']

Я получаю следующую ошибку.

" у объекта 'int' нет атрибута 'id'"

По сути, каким-то образом сериализатор вообще не воспринимает это поле как внешний ключ. Есть ли способ принудительно изменить поведение?

На самом деле. Глупый я. Нужно было ссылаться на объект member в профиле, как 'member', а не 'member_id'.

class MemberProfileSerializer(serializers.HyperlinkedModelSerializer):

        member = MemberSerializer()
            
        class Meta:
           model = Profile
           fields = ['member','bio','address','mobile']

Виллем, спасибо за ваши предложения!

Вернуться на верх