Django 序列化 json
Django serializing json
我正在使用 django 构建 API,但遇到了一个问题。
我有一个 UserDetail 模型,它有一个指向 User 模型的 foreing 键。
class UserDetail(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
about = models.CharField(max_length=200, default="", blank=True)
我想将User的信息和UserDetails的信息序列化为一个json,我目前正在做的是:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email')
class DetailSerializer(serializers.ModelSerializer):
user = UserSerializer(required=True)
class Meta:
model = UserDetail
fields = ('user', 'about',)
现在我得到这个:
{
"user": {
"username": "julia",
"first_name": "antonia",
"last_name": "uri",
"email": "as¡¡test@test.test"
},
"about": ""
}
但我想从用户那里获取 UserDetail 的信息,而不是相反(就像我现在正在做的那样),所以我得到的信息是这样的:
{
"username": "julia",
"first_name": "antonia",
"last_name": "uri",
"email": "test@test.test",
"details": {
"about": ""
}
}
如果有人能告诉我我做错了什么,我将不胜感激。
谢谢!
编辑
这是我的观点:
#user = User.objects.select_related('userdetail').get(username=username)
user = User.objects.get(username=username)
userDetail = UserDetail.objects.get(user=user)
if request.method == 'GET':
serializer = DetailSerializer(userDetail)
return Response(serializer.data)
你可以这样做:
class DetailSerializer(serializers.ModelSerializer):
class Meta:
model = UserDetail
fields = ('about',)
class UserSerializer(serializers.ModelSerializer):
details = DetailSerializer(many=False, source="userdetail")
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'details')
source=userdetail
是您从用户模型实例
访问 userdetail
的方式
我正在使用 django 构建 API,但遇到了一个问题。
我有一个 UserDetail 模型,它有一个指向 User 模型的 foreing 键。
class UserDetail(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
about = models.CharField(max_length=200, default="", blank=True)
我想将User的信息和UserDetails的信息序列化为一个json,我目前正在做的是:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email')
class DetailSerializer(serializers.ModelSerializer):
user = UserSerializer(required=True)
class Meta:
model = UserDetail
fields = ('user', 'about',)
现在我得到这个:
{
"user": {
"username": "julia",
"first_name": "antonia",
"last_name": "uri",
"email": "as¡¡test@test.test"
},
"about": ""
}
但我想从用户那里获取 UserDetail 的信息,而不是相反(就像我现在正在做的那样),所以我得到的信息是这样的:
{
"username": "julia",
"first_name": "antonia",
"last_name": "uri",
"email": "test@test.test",
"details": {
"about": ""
}
}
如果有人能告诉我我做错了什么,我将不胜感激。
谢谢!
编辑
这是我的观点:
#user = User.objects.select_related('userdetail').get(username=username)
user = User.objects.get(username=username)
userDetail = UserDetail.objects.get(user=user)
if request.method == 'GET':
serializer = DetailSerializer(userDetail)
return Response(serializer.data)
你可以这样做:
class DetailSerializer(serializers.ModelSerializer):
class Meta:
model = UserDetail
fields = ('about',)
class UserSerializer(serializers.ModelSerializer):
details = DetailSerializer(many=False, source="userdetail")
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'details')
source=userdetail
是您从用户模型实例
userdetail
的方式