Django-Rest-Framework AttributeError 对象没有属性 'id'



尝试通过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)

最新更新