我有一个名为“参与者”的ArrayField模型。
由于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
}
答案 0 :(得分: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')
中读取的更多deatails