我有模特,我可以拥有所有者是用户或客户
@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
我有2个串行器UserSerializer和ClientSerializer我想为所有者写这样的东西
owner = UserSerializer if insstance(User, value) or ClientSerializer if insstance(Client, value)
任何想法??
答案 0 :(得分: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并序列化你的所有者基于方法中的测试逻辑
希望这会有所帮助