django - 如何在 Django Rest Framework 中仅使用 1 个字段来展平序列化数据
问题描述
我有以下序列化程序:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ("username", "profile_picture")
class SomeSerializer(serializers.ModelSerializer):
some_user = UserSerializer()
class Meta:
model = UserFollowing
fields = ("some_user",)
以及与之关联的模型UserFollowing
:
class UserFollowing(models.Model):
some_user = models.ForeignKey(User, on_delete=models.CASCADE)
序列化程序返回如下内容:
[
{
"some_user": {
"username": "jane",
"profile_picture": "/media/picture.jpg"
}
},
...
]
为了一致性和简单性,我想返回:
[
{
"username": "jane",
"profile_picture": "/media/picture.jpg"
},
...
]
我怎样才能做到这一点?
解决方案
您可以使用serializerMethodField
:
class SomeSerializer(serializers.ModelSerializer):
username = serializers.SerializerMethodField()
profile_picture = serializers.SerializeMethodField()
def get_username(self, obj):
return obj.some_user.username
def get_profile_picture(self, obj):
return obj.some_user.profile_picture
class Meta:
model = UserFollowing
fields = ("username", "profile_picture")
推荐阅读
- scala - Scala:如何在 map/foreach 迭代之间等待?
- javascript - Ember.JS 强制计算属性重新计算
- flutter - 如何在 Flutter 的应用栏下方创建一个带有图标的按钮
- javascript - 在表达式中使用 pow() 或 ^ 时,JS 动画不起作用
- reactjs - 根据服务响应更新 redux 状态
- javascript - firebase.auth().currentUser 始终为空
- node.js - 无法在 VS Code 上执行 Azure Functions
- mockito - 如何在 MockBean 的 Repository 中调用真正的保存方法?
- android - Glide 不会在本地缓存图像
- android - How to read Image from a specific folder on Android 10 using MediaStore