如何在 Django Rest Framework 中仅使用 1 个字段展平序列化数据
How to flatten serialized data with only 1 field in Django Rest Framework
我有以下序列化程序:
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)
序列化程序 return 是这样的:
[
{
"some_user": {
"username": "jane",
"profile_picture": "/media/picture.jpg"
}
},
...
]
为了一致性和简单性,我想 return:
[
{
"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")
我有以下序列化程序:
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)
序列化程序 return 是这样的:
[
{
"some_user": {
"username": "jane",
"profile_picture": "/media/picture.jpg"
}
},
...
]
为了一致性和简单性,我想 return:
[
{
"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")