Request.session['pk'] = user.pk AttributeError: объект 'QuerySet' не имеет атрибута 'pk'

Мне нужно получить пользователя для account_verify, чтобы сравнить введенный код проверки с правильным кодом входа, но я получил эту ошибку, также я хочу показать номер телефона пользователя в account verify я использовал контекст для этого, но я думаю, что это неправильно

view

def account_register(request):
if request.user.is_authenticated:
    return redirect("store:home")
if request.method == "POST":
    registerForm = RegistrationForm(request.POST)
    if registerForm.is_valid():
        username = registerForm.cleaned_data["user_name"]
        phone_number = registerForm.cleaned_data["phone_number"]
        password = registerForm.cleaned_data["password"]
        user = User.object.filter(phone_number=phone_number)
        if not user.exists():
            new_user = User(phone_number=phone_number)
            new_user.username = username
            new_user.phone_number = phone_number
            new_user.set_password(password)
            new_user.is_active = False
            new_user.save()

        else:
            return HttpResponse("this phone number already taken", status=400)

        request.session['pk'] = user.pk
        return redirect("account:account_verify")
else:
    registerForm = RegistrationForm()
return render(request, "account/authentication.html", {"form": registerForm})


def account_verify(request):
form = CodeForm(request.POST or None)
print(form)
pk = request.session.get('pk')
print(pk)
if pk:
    user = User.object.get(pk=pk)
    code = user.code
    user_phone_number = user.phone_number
    code_user = f"{user.code}"
    if not request.POST:
        print(code_user)
        send_sms(code_user, user.phone_number)
    if form.is_valid():
        num = form.cleaned_data.get('number')

        if str(code) == num:
            user.is_active = True
            user.save()
            login(request, user)
            return redirect("store:home")
        else:
            return redirect("account:register")
context = {
    'form': form,
    'user_phone_number': user_phone_number
}
return render(request, "account/verify.html", context)

error

File "C:\Users\_rickoutis_\djx\Rex_acs32\account\views.py", line 49, in account_register
request.session['pk'] = user.pk

AttributeError: объект 'QuerySet' не имеет атрибута 'pk'

по поводу вашей проблемы: Когда вы звоните:

user = User.object.filter(phone_number=phone_number)

Вы получаете объект QuerySet. QuerySet не имеет доступа к атрибутам. Если вы хотите использовать телефонный_номер конкретного пользователя, замените эту строку кода на следующую:

user = User.object.get(phone_number=phone_number)

Используя оператор 'get' вместо 'filter', вы получаете доступ к определенным записям в базе данных, которые позволяют вам использовать их атрибуты.

ошибка в следующей строке:

user = User.object.filter(phone_number=phone_number)

метод filter возвращает список объектов, поэтому он не объектного типа, для решения этой проблемы используйте get() вместо этого, измененная строка выглядит так:

user = User.object.get(phone_number=phone_number)

Используйте filter().first(), чтобы избежать этой проблемы, а также, если он не уникален в ваших моделях, было бы хорошо сделать его таким

user = User.objects.filter(phone_number=phone_number).first()

так вы предотвратите MultipleObjectsReturned ошибку.

но я бы рекомендовал вам сделать этот номер телефона unique=True

Вернуться на верх