[Python] AttributeError: 'ReturnDict' object has no attribute 'pk'

Discussão em 'Python' iniciado por Stack, Março 14, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to design an api for user login and logout. But I am facing an error of AttributeError: 'ReturnDict' object has no attribute 'pk'. What might be creating this error?

    [​IMG]

    traceback in detail

    File "/home/tushant/Projects/nepMart/account/api/views.py", line 61, in post
    login(request, serializer.data)
    File "/home/tushant/.virtualenvs/NepMart/lib/python3.5/site-packages/django/contrib/auth/__init__.py", line 102, in login
    if _get_user_session_key(request) != user.pk or (
    AttributeError: 'ReturnDict' object has no attribute 'pk'


    Serializers.py

    class UserLoginSerializer(ModelSerializer):
    token = CharField(allow_blank=True, read_only=True)
    username = CharField(required=False, allow_blank=True)
    # email = EmailField(label='Email Address',required=False, allow_blank=True)
    remember = BooleanField(default=True, help_text = ("If checked you will stay logged in for 3 weeks"))
    class Meta:
    model = User
    fields = [
    'username',
    # 'email',
    'password',
    'remember',
    'token',

    ]
    extra_kwargs = {"password":
    {"write_only": True}
    }


    views.py

    class UserLoginAPIView(APIView):
    permission_classes = [AllowAny]
    serializer_class = UserLoginSerializer

    def post(self, request, *args, **kwargs):
    data = request.data
    serializer = UserLoginSerializer(data=data)
    if serializer.is_valid(raise_exception=True):
    # new_data = serializer.data
    print('request.data', request.data)
    print('serializer.data',serializer.data)
    login(request, serializer.data)
    if data.get('remember'):
    request.session.set_expiry(60 * 60 * 24 * 7 * 3)
    else:
    request.session.set_expiry(0)
    return Response({
    'detail': ('Logged in successfully'),
    # TODO: maybe more user info in the request would have sense
    'username': serializer.data.username
    })
    return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)


    ifincase usercreation is needed

    class UserCreateSerializer(ModelSerializer):
    email = EmailField(label='Email Address')
    email2 = EmailField(label='Confirm Email Address')
    class Meta:
    model = User
    fields = [
    'username',
    'id',
    'password',
    'email',
    'email2',
    ]
    extra_kwargs = {"password":
    {"write_only": True}
    }

    def create(self, validated_data):
    print('validated_data',validated_data)
    username = validated_data['username']
    email = validated_data['email']
    email2 = validated_data['email2']
    password = validated_data['password']
    user_obj = User(
    username=username,
    email=email
    )
    user_obj.set_password(password)
    user_obj.save()
    return validated_data

    Continue reading...

Compartilhe esta Página