2016-08-23 24 views
1

我有一個具有以下模型:返回相關的GUID,而不是IDS在Django的REST的架構序列化

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) 

我想通過只返回GUID字段來掩蓋我的用戶的系列化Django Rest框架。這是我第一次嘗試,但它似乎沒有工作

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(細節),並列出調用。

問題2:我是否以正確的方式區分邀請人和被邀請人?因爲看起來,當我進入to_representation方法時,兩次的值都是相同的。

回答

0

1)可以通過在視圖集重寫get_serializer_class,像這樣提供每個方法串行:

def get_serializer_class(self): 
    if self.action == 'retrieve': 
     return CreateSerializer 
    else: 
     return super().get_serializer_class() 

2)可以映射從子對象serialiezr領域,這樣的事情:

class TeamInviteSerializer(serializers.ModelSerializer): 
    lookup_field = 'guid' 
    inviter = UUIDField(read_only=True, source='inviter.guid') 
    invitee = UUIDField(read_only=True, source='invitee.guid') 
相關問題