我有用户模型,一对用户之间的好友生成模型。尝试序列化特定用户的列表以实现类似的目的:
[{
"id": 1,
"name": "Foo"
"is_friend": true
},
{
"id": 1,
"name": "Bar"
"is_friend": false
}]
我通过应用程序在所有可能的地方使用 ModelSerializer,所以我想到的第一个解决方案是在用户模型上实现 is_friend 计算属性,并在序列化程序中创建只读属性,但只是想象下面的 SQL hell 。对于每个用户,都会有另一个 SQL 选择,这对我来说似乎根本不是足够好的解决方案。所以我想到了一些事情,比如让我的 friend ,让我想要比较关系的特定用户,并只使用 2 个 SQL 选择在 Python 端完成工作。我想知道在 DRF3 中最优雅的解决方案是什么?有没有做这些事情的模式?有任何想法吗?会很棒!谢谢你!
请您参考如下方法:
您应该能够嵌套序列化器来实现这一点。例如:
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
