AttributeError: объект «ReturnDict» не имеет атрибута «pk»Python

Программы на Python
Ответить
Anonymous
 AttributeError: объект «ReturnDict» не имеет атрибута «pk»

Сообщение Anonymous »

Я пытаюсь разработать API для входа и выхода пользователей. Но я столкнулся с ошибкой AttributeError: объект «ReturnDict» не имеет атрибута «pk». Что может быть причиной этой ошибки?

Изображение


подробное отслеживание

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)


если требуется создание пользователя

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


Подробнее здесь: https://stackoverflow.com/questions/384 ... tribute-pk
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»