在Django Rest框架序列化中返回相关的GUID而不是ID

在Django Rest框架序列化中返回相关的GUID而不是ID,django,django-rest-framework,Django,Django Rest Framework,我有一个模型,具有以下内容: class TeamInvite(models.Model): inviter = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='invites_sent') invitee = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='invites_received') team = models.Foreign

我有一个模型,具有以下内容:

class TeamInvite(models.Model):
    inviter = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='invites_sent')
    invitee = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='invites_received')
    team = models.ForeignKey(Team, related_name='team_invites')
    guid = models.UUIDField(default=uuid.uuid4)

class UserMetaData(models.Model):
    user = AutoOneToOneField(settings.AUTH_USER_MODEL, related_name='usermetadata')
    guid = models.UUIDField(default=uuid.uuid4)
我试图通过只返回Django Rest框架中的guid字段来隐藏用户的序列化。这是我的第一次尝试,但似乎不起作用

class InviteListingField(serializers.RelatedField):
    def to_representation(self, value):
        return value.usermetadata.guid

class TeamInviteSerializer(serializers.ModelSerializer):
    lookup_field = 'guid'
    inviter = InviteListingField(read_only=True)
    invitee = InviteListingField(read_only=True)
    class Meta:
        model = TeamInvite
        fields = ('guid', 'inviter', 'invitee', 'team'
)

问题1:我只希望此特殊序列化应用于GET(detail)和List调用

问题2:我是否正确区分了邀请者和被邀请者?因为当我进入to_表示方法时,似乎两次的值都是一样的。

1)您可以通过覆盖视图集上的
get_serializer\u类来提供每个方法的序列化程序,类似这样:

def get_serializer_class(self):
    if self.action == 'retrieve':
        return CreateSerializer
    else:
        return super().get_serializer_class()
class TeamInviteSerializer(serializers.ModelSerializer):
    lookup_field = 'guid'
    inviter = UUIDField(read_only=True, source='inviter.guid')
    invitee = UUIDField(read_only=True, source='invitee.guid')
2) 您可以从子对象映射serialiezr字段,如下所示:

def get_serializer_class(self):
    if self.action == 'retrieve':
        return CreateSerializer
    else:
        return super().get_serializer_class()
class TeamInviteSerializer(serializers.ModelSerializer):
    lookup_field = 'guid'
    inviter = UUIDField(read_only=True, source='inviter.guid')
    invitee = UUIDField(read_only=True, source='invitee.guid')
1) 通过覆盖视图集上的
get\u serializer\u class
,可以提供每个方法的序列化程序,如下所示:

def get_serializer_class(self):
    if self.action == 'retrieve':
        return CreateSerializer
    else:
        return super().get_serializer_class()
class TeamInviteSerializer(serializers.ModelSerializer):
    lookup_field = 'guid'
    inviter = UUIDField(read_only=True, source='inviter.guid')
    invitee = UUIDField(read_only=True, source='invitee.guid')
2) 您可以从子对象映射serialiezr字段,如下所示:

def get_serializer_class(self):
    if self.action == 'retrieve':
        return CreateSerializer
    else:
        return super().get_serializer_class()
class TeamInviteSerializer(serializers.ModelSerializer):
    lookup_field = 'guid'
    inviter = UUIDField(read_only=True, source='inviter.guid')
    invitee = UUIDField(read_only=True, source='invitee.guid')