在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')