2017-12-11 10 views
0

私は私が2シリアライザUserSerializerを持っている所有者がユーザーまたはクライアント選択シリアライザ

@property 
    def owner(self): 
     return self.created_by_user or self.created_by_client 

で持っていると私は、このフィールドを必要とするシリアライザ

class MessageSerializer(serializer.ModelSerializer): 
owner = (can be user or client) i take it from @property in model 

を持つことができるモデルを持っていますとClientSerializer私はこのような何かの所有者のための書き込みをしたい

owner = UserSerializer if insstance(User, value) or ClientSerializer if insstance(Client, value) 

何か考えですか?

答えて

0

あなたは、この使用してDRFのSerializerMethodFieldのように解決することができます:私は間違ってプロパティとシリアライザの名前を使用した場合申し訳ありませんが、私はあなたが基本的なアイデアを得るだろうと思い

class MessageSerializer(serializers.ModelSerializer): 
    owner = serializers.SerializerMethodField() 

    def get_owner(self, instance): 
     value = instance.field # replace the field name 
     if instance.created_by_user: 
      return UserCreatedSerializer(value).data 
     elif instance.created_by_client: 
      return ClientCreatedSerializer(value).data 

を:所有者が財産であることから、DRFあなたは、これが

+0

こんにちは、THXその助け私を助け方法で

希望をSerializerMethodFieldを使用してテスト・ロジックに基づいて、あなたの所有者をシリアル化する必要があるので、シリアライザは、直接施設をシリアル化することはできません。私はvalue = instance.fieldをvalue = instance.ownerに変更します。 –