Django-Rest-Framework AttributeError 对象没有属性 'id'
Django-Rest-Framework AttributeError object has no attribute 'id'
我在尝试通过 DRF 输入数据后遇到以下错误
File "G:\partshouse\venv\lib\site-packages\rest_framework_simplejwt\tokens.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',
]
听说我cus_name作为用户名是用户客户可以登录
查看
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)
我在尝试通过 DRF 输入数据后遇到以下错误
File "G:\partshouse\venv\lib\site-packages\rest_framework_simplejwt\tokens.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',
]
听说我cus_name作为用户名是用户客户可以登录
查看
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)