2017-09-01 83 views
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) 

它的任何一個幫助......

回答

0
data = request.data.dict() 
data['users'] = { 'phone_number': request.data.pop('phone_number'), 'user_domain': request.data.pop('user_domain'), 'known_languages': request.data.pop('known_languages') } 
serializer = UserSerializer(user_obj, data=data, partial=True) 

工作非常適合我

0

可以刪除此三行:

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 

,只是使用內部update

def update(self, instance, validated_data): 
    request = self.context.get('request') 
    data = request.data.copy() 
    users = { 
     'phone_number': data.get('phone_number'), 
     'user_domain': data.get('user_domain'), 
     'known_languages': data.get('known_languages') 
    } 
    # your code ... 
+0

self.context在update方法中返回空字典。無論如何序列化程序應該返回validated_data。但是我沒有得到它......你能告訴我爲什麼我沒有得到它嗎?@Bar Brown – rakesh

+0

這是因爲你使用django類視圖,試着用rest api [modelviewset](http://www.django- rest-framework.org/api-guide/viewsets/#modelviewset) –

相關問題