![](/img/trans.png)
[英]how to get reverse relation in django serializers SlugRelatedField
[英]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.