DjangoRestFrameWork 从一个模型中过滤另一个模型
DjangoRestFrameWork filter one model from another
我有一个名为 "participants" 的带有 ArrayField 的模型。
由于 postgress 的 ArrayField 的限制,我无法将数组作为用户列表。因此,我将用户名作为字符串存储在数组中。
现在我想序列化用户 ID 和用户名
class ConversationSerializer(serializers.ModelSerializer):
class Meta:
model = c.Conversation
lookup_field = 'uid'
fields = (
'uid',
'participants',
'archived',
)
我是否可以 return 参与者的用户 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
}
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
我有一个名为 "participants" 的带有 ArrayField 的模型。
由于 postgress 的 ArrayField 的限制,我无法将数组作为用户列表。因此,我将用户名作为字符串存储在数组中。
现在我想序列化用户 ID 和用户名
class ConversationSerializer(serializers.ModelSerializer):
class Meta:
model = c.Conversation
lookup_field = 'uid'
fields = (
'uid',
'participants',
'archived',
)
我是否可以 return 参与者的用户 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
}
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