2017-11-22 22 views
1

ArrayFieldが "participants"というモデルがあります。DjangoRestFrameWork別のモデルから1つのモデル

私はpostgress 'ArrayFieldの制限のためにユーザーのリストにすることはできません。このため、ユーザー名は文字列として配列に格納されています。

今、私は、ユーザーIDをシリアル化したい、とユーザ名

class ConversationSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = c.Conversation 
     lookup_field = 'uid' 
     fields = (
      'uid', 
      'participants', 
      'archived', 
     ) 

がありますとにかく私は、文字列の代わりに、参加者のユーザーIDを返すことができますか?だからではなく、以下の結果を:

{ 
    "uid": "dd51b07d-06f2-481a-b68d-fa18e9959392", 
    "participants": [ 
     "userJohn", "userDave" 
    ], 
    "archived": false 
} 

私はユーザモデルのフィールドを得ることができます:

{ 
    "uid": "dd51b07d-06f2-481a-b68d-fa18e9959392", 
    "participants": [ 
     { 
      'username': 'userJohn', 
      'id': 4, 
     }, 
     { 
      'username': 'userDave', 
      'id': 5, 
     } 

    ], 
    "archived": false 
} 

答えて

1

serializermethodfieldは助けることができる、とあなたは標準ユーザーモデルを使用している場合、あなたは試すことができます:

class ConversationSerializer(serializers.ModelSerializer): 
    participants = serializers.SerializerMethodField() 
    class Meta: 
     model = c.Conversation 
     lookup_field = 'uid' 
     fields = (
      'uid', 
      'participants', 
      'archived', 
     ) 

    def get_participants(self, obj): 
     users = User.objects.filter(username__in=obj.participants) 
     return users.values('id', 'username') 

詳細はこちらからserializermethodfield

+0

これは魔法でした!ありがとうございました! – IzPrEE