0
我已经正确地定义了一切。 (GET工作正常)我可以通过嵌套序列化程序获取用户详细信息。但是当我做PUT我没有得到validation_data更新方法是在UserSerializer。Django Rest框架嵌套序列化程序不在validated_data中返回关系值
models.py
class UserProfile(models.Model):
user = models.ForeignKey(User, related_name='users',
on_delete=models.CASCADE)
phone_number = models.CharField(max_length=15)
known_languages = models.CharField(max_length=100)
date_updated = models.DateTimeField(auto_now=True)
user_domain = models.CharField(max_length=100, default=None)
serializers.py
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = ['phone_number', 'known_languages', 'user_domain']
class UserSerializer(serializers.ModelSerializer):
users = UserProfileSerializer()
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'users']
def update(self, instance, validated_data):
import pdb;pdb.set_trace()
#here I am not getting users value. it is returning empty list
return instance
views.py
def put(self, request, pk):
user_obj = self.get_object(pk)
request.POST._mutable = True
request.data['users'] = { 'phone_number': request.data.pop('phone_number'), 'user_domain': request.data.pop('user_domain'), 'known_languages': request.data.pop('known_languages') }
request.POST._mutable = False
serializer = UserSerializer(user_obj, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
它的任何一个帮助......
self.context在update方法中返回空字典。无论如何序列化程序应该返回validated_data。但是我没有得到它......你能告诉我为什么我没有得到它吗?@Bar Brown – rakesh
这是因为你使用django类视图,试着用rest api [modelviewset](http://www.django- rest-framework.org/api-guide/viewsets/#modelviewset) –