如何在Django REST Framework 3中进行模型批量插值?

时间:2015-09-13 18:11:57

标签: python django django-models django-rest-framework

我有一个用户模型,一对用户之间的朋友跨越模型。尝试序列化特定用户列表以实现以下目标:

[{
 "id": 1,
 "name": "Foo"
 "is_friend": true
},
{
 "id": 1,
 "name": "Bar"
"is_friend": false
}]

我可以通过应用程序随处使用ModelSerializer,因此我想到的第一个解决方案就是在User模型上实现is_friend计算属性,只在序列化器中创建只读属性,但想象下面的下面SQL地狱。对于每个用户来说,这将成为另一个对我来说似乎不够好的解决方案的SQL选择。所以我想到了一些事情,比如让我的朋友,让我的特定用户,我想要比较关系,并使用2个SQL选择在Python端完成工作。我想知道DRF3中最优雅的解决方案是什么?做这些事情有什么模式吗?有任何想法吗?太棒了!谢谢!

1 个答案:

答案 0 :(得分:1)

您应该能够嵌套序列化程序来实现此目的。例如:

class RelatedFriendSerializer(serializers.ModelSerializer):
    class Meta:
        model = FriendModle
        fields = ('id', '...')


class UserSerializer(serializers.ModelSerializer):
    relatedfriendserializer = RelatedFriendSerializer(read_only=False)
    class Meta:
        model = User
        fields = ('id', 'relatedfriendserializer',)

在您的模型定义中,UserFriend之间的相关名称应称为relatedfriendserializer