簡體   English   中英

如何在 Django Serializers 中獲取請求用戶 ID?

[英]How to get request user id in Django Serializers?

我收到KeyError : 'request'而我想通過用戶請求獲取當前用戶id 我試過這樣的事情: validated_data['user_id'] = CarOwnerCarDetails.objects.get(user_id=self.context['request'].user.id)但它拋出了我KeyError
如何通過序列化程序中的請求獲取當前用戶id
如果有任何幫助將不勝感激。 非常感謝我的朋友們。

楷模 :

class CarOwnerCarDetails(models.Model):
    user_id = models.OneToOneField(User, on_delete=models.CASCADE)
    car_plate_number = models.CharField(max_length=20, null=True, blank=True)

class GetQuotes(models.Model):
    user = models.ForeignKey(CarOwnerCarDetails, on_delete=models.CASCADE, blank=True, null=True)
    subject = models.CharField(max_length=240, blank=False, null=True)

序列化程序:


class ShopGarageGetQuoteSerializer(ModelSerializer):
    subject = CharField(error_messages={'required':'subject key is required', 'blank':'subject is required'})
    user_id = serializers.CharField(read_only=True)
    
    class Meta:
        model = GetQuotes
        fields= ['user_id', 'subject']      
      
    def create(self,validated_data):
        subject        = validated_data['subject']
        validated_data['user_id'] = CarOwnerCarDetails.objects.get(user_id=self.context['request'].user.id)

        quotes_obj = GetQuotes.objects.create(
            subject=subject,
            user_id=validated_data['user_id']
            ) 
        return validated_data    

視圖.py:

class ShopGarageGetQuoteAPIView(APIView):
    permission_classes = (IsAuthenticated,)
    def post(self,request,*args,**kwargs):
        data           = request.data
        serializer =  ShopGarageGetQuoteSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({'success' :'True','message' : 'Quotes send successfully','data' : serializer.data},status=200)
        return Response(serializer.errors,status=400)

正如官方文檔中所寫,用戶信息(如果身份驗證框架設置正確)可使用request.user

在您的視圖中,您必須使用序列化程序的上下文傳遞它

class ShopGarageGetQuoteAPIView(APIView):
    permission_classes = (IsAuthenticated,)
    def post(self,request,*args,**kwargs):
        data  = request.data
        context = {'request': request} 
        serializer =  ShopGarageGetQuoteSerializer(data=request.data, context=context)
        if serializer.is_valid():
            serializer.save()
            return Response({'success' :'True','message' : 'Quotes send successfully','data' : serializer.data},status=200)
        return Response(serializer.errors,status=400)

對於通用視圖/視圖集,標准上下文包含“請求”、“視圖”和“格式”,但在標准 APIView 中,您必須手動傳遞它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM