django - 基于主键的对象序列化和反序列化
问题描述
我有几个相关的对象,比如用户和位置。用户和位置具有一对一的关系
class Location(models.Model):
name = models.CharField(max_length=100)
class CustomUser(AbstractUser):
first_name = models.CharField(null=True, max_length=500)
last_name = models.CharField(null=True, max_length=500)
location = models.ForeignKey(Location, null=True, on_delete=models.CASCADE)
在使用django rest 框架时,对用户的 get 请求将返回类似
{
"id": 123,
"first_name": "first_name",
"last_name": "last_name",
"location": 34
}
我想得到类似的回应,
{
"id": 123,
"first_name": "first_name",
"last_name": "last_name",
"location": {
"id": 34,
"name": "No Man's Land"
}
}
嵌套序列化程序和 PrimaryKeyRelatedField 可以工作,但并非在所有情况下都有效。有没有办法做到这一点?
解决方案
实现所需结果的正常方法是使用嵌套序列化程序。那就是为您的嵌套位编写一个序列化程序,然后将其用作父序列化程序中的一个字段。像这样的东西:
class LocationSerializer(serializers.Serializer):
id = serializers.IntegerField()
name = serializers.CharField(max_length=100)
class UserSerializer(serializers.Serializer):
first_name = serializers.CharField(null=True, max_length=500)
last_name = serializers.CharField(null=True, max_length=500)
location = LocationSerializer()