尝试通过DRF输入数据后遇到以下错误
File "G:partshousevenvlibsite-packagesrest_framework_simplejwttokens.py", line 176, in for_user
user_id = getattr(user, api_settings.USER_ID_FIELD)
AttributeError: 'TestBookingSerializer' object has no attribute 'id'
[17/Apr/2022 02:11:40] "POST /api/testbooking/ HTTP/1.1" 500 17894
Serializer.py
class TestBookingSerializer(serializers.ModelSerializer):
class Meta:
model = PendingBooking
fields = ['booking_id', 'cus_name', 'cus_unique_id', 'created_by', 'date', 'loading_date_time',
'unloading_date_time', 'due_amount', 'trip_profit',
'ph_number', 'cargo_weight', 'vehicle_type', 'loading_address',
'trip_distance', 'unloading_address',
]
听到I cus_name作为用户名,这是用户客户可以登录
<<p> 视图/strong>class TestAPIBookingOnly(APIView):
renderer_classes = [UserRenderers]
permission_classes = [IsAuthenticated]
def post(self, request, format=False):
serial = TestBookingSerializer(data=request.data, partial=True)
if serial.is_valid():
token = get_tokens_for_user(serial)
serial.save()
return Response({'token': token, 'msg': 'Data Entry Successful',
}, status=status.HTTP_200_OK)
return Response(serial.errors, status=status.HTTP_400_BAD_REQUEST)
在我看来,您应该首先通过此代码获得用户的id,并将此user_id放在get_token_for_user()方法中:
def post(self, request, format=False):
user_id = self.request.user.id
serial = TestBookingSerializer(data=request.data, partial=True)
if serial.is_valid():
token = get_tokens_for_user(user_id)
serial.save()
return Response({'token': token, 'msg': 'Data Entry Successful',
}, status=status.HTTP_200_OK)
return Response(serial.errors, status=status.HTTP_400_BAD_REQUEST)