我有一个用户模型,一对用户之间的朋友跨越模型。尝试序列化特定用户列表以实现以下目标:
[{
"id": 1,
"name": "Foo"
"is_friend": true
},
{
"id": 1,
"name": "Bar"
"is_friend": false
}]
我可以通过应用程序随处使用ModelSerializer,因此我想到的第一个解决方案就是在User模型上实现is_friend
计算属性,只在序列化器中创建只读属性,但想象下面的下面SQL地狱。对于每个用户来说,这将成为另一个对我来说似乎不够好的解决方案的SQL选择。所以我想到了一些事情,比如让我的朋友,让我的特定用户,我想要比较关系,并使用2个SQL选择在Python端完成工作。我想知道DRF3中最优雅的解决方案是什么?做这些事情有什么模式吗?有任何想法吗?太棒了!谢谢!
答案 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',)
在您的模型定义中,User
和Friend
之间的相关名称应称为relatedfriendserializer