2017-03-20 49 views
0

我有一個項目,由oauth2_provider.ext.rest_framework.OAuth2Authentication進行驗證。請求頭中有一個令牌用於驗證和識別。我認爲在處理創建操作時,我不應該在請求數據中明確包含用戶標識。但是序列化器需要用戶信息來創建一個新的實例。所以我在序列化程序中包含了一個user_id字段,並在驗證後將該值寫入request.data字典。如何使用請求數據將用戶標識傳入序列化程序?

好嗎?有沒有更好的方法?

serializers.py

class serializer(serializers.Serializer): 
    user = UserSerializer(read_only=True) 
    user_id = serializers.UUIDField(write_only=True) 
    content = serializers.CharField() 

views.py

class CommentList(generics.ListCreateAPIView): 
    def create(self, request, *args, **kwargs): 
     request.data['user_id'] = request.user.id 
     return super(CommentList, self).create(request) 

回答

1

它是清潔劑來覆蓋你的串行create(validated_data)

class CommentSerializer(serializers.Serializer): 
    ... 

    def create(self, validated_data): 
     user = self.context['request'].user 
     comment = Comment.objects.create(
     user=user, 
     **validated_data 
    ) 
     return comment 

http://www.django-rest-framework.org/api-guide/serializers/#saving-instances

然後你不需要自定義你的視圖,你可以使用通用視圖。

+1

我覺得serializer中的self.request.user應該是self.context ['request']。user' – Guinner

相關問題