我是新来使用Django Rest框架和序列化数据,我试图更新嵌套的序列化程序,但跑到墙上,我环顾四周,但大多数人都有问题在serializers.py一边我甚至不能进入高清更新没有错误,这些都是我的课:Django Rest框架,更新嵌套的序列化数据
Views.py
from django.shortcuts import render
from rest_framework import generics
from api.serializers import ProfileSerializer
from django.contrib.auth.models import User
from api.models import Profile
from django.http import JsonResponse
class ProfileView(generics.ListCreateAPIView):
def get(self, request):
profile = Profile.objects.filter(user_id=request.user.id)
serializer = ProfileSerializer(profile, many=True)
return JsonResponse(serializer.data, safe=False)
def post(self, request, *args, **kwargs):
profile = Profile.objects.filter(user_id=request.user.id)
data = request.POST
serializer = ProfileSerializer(profile, data=data, partial=True)
if serializer.is_valid():
serializer.save()
else:
print(serializer.errors)
return JsonResponse(serializer.data, safe=False)
serializers.py
from rest_framework import serializers
from django.contrib.auth.models import User
from api.models import Profile
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id','username','first_name','last_name','email','last_login','date_joined','is_active')
class ProfileSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = Profile
fields = ('id','phone','birth_date','user')
def update(self, instance, validated_data):
#Cant get here
print("hey")
return instance
样品结构
[
{
"id": 3,
"phone": "XXXXXX",
"birth_date": "2017-06-29",
"user": {
"id": 1,
"username": "xxxxx",
"first_name": "XXXXX",
"last_name": "XXXX",
"email": "[email protected]",
"last_login": "2017-06-29T15:16:11.438818Z",
"date_joined": "2017-06-23T16:48:38Z",
"is_active": true
}
}
]
我现在的错误: (发表资料:手机= 0000000)
AttributeError at /profile/
'QuerySet' object has no attribute '_meta'
谢谢!
太棒了!这适用于正常更新,我可以更改上层(电话)上的数据,但是您能否帮助我更新嵌套集的数据? (例如更改用户名) 我给它一个尝试发布'user.email = something',但得到以下错误'.update()方法不支持可写嵌套字段默认情况下.'我怎么写我的自定义更新方法做到这一点呢?再次感谢 – Amirgem
@Amirgem检查更新:) – neverwalkaloner
我仍然得到相同的错误,它看起来会工作,但我似乎并没有进入该功能,当我发布数据时,它会尝试默认更新,而不是我的自定义的,我需要在我的视图中使用.update()或什么来指定它? – Amirgem