2017-12-11 15 views
0

내가 내가 주인을 가질 수 있습니다 모델을 사용자 또는 클라이언트선택 시리얼은

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

가되어 있고 나는 2 시리얼 UserSerializer이 내가이 분야

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를 이 방법에서 SerializerMethodField를 사용하여 테스트 로직에 따라 소유자를 직렬화 할 수 있도록 직렬 직접 속성을 직렬화 할 수

희망이

+0

안녕, THX의 도움을 내게하는 데 도움이됩니다. value = instance.field 값을 value = instance.owner로 변경합니다. –