我需要為 account_verify 獲取一個用戶,以便將輸入的驗證碼與正確的登錄碼進行比較,但是我也遇到了這個錯誤我想在帳戶驗證中顯示用戶電話號碼我為此使用了背景關系,但我認為這是錯誤的
看法
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)
錯誤
File "C:\Users\_rickoutis_\djx\Rex_acs32\account\views.py", line 49, in account_register
request.session['pk'] = user.pk
AttributeError: 'QuerySet' 物件沒有屬性 'pk'
uj5u.com熱心網友回復:
關于您的問題:當您致電時:
user = User.object.filter(phone_number=phone_number)
您將獲得一個 QuerySet 物件。QuerySet 無權訪問屬性。如果您想使用特定用戶的電話號碼,請嘗試將這行代碼替換為以下代碼:
user = User.object.get(phone_number=phone_number)
通過使用“get”陳述句而不是“filter”,您可以訪問資料庫中允許您使用其屬性的特定記錄。
uj5u.com熱心網友回復:
以下行中的錯誤:
user = User.object.filter(phone_number=phone_number)
filter 方法回傳物件串列,因此它不是物件型別,要解決此問題,請改用 get(),修改后的行是:
user = User.object.get(phone_number=phone_number)
uj5u.com熱心網友回復:
使用filter().first()以避免此問題也如果在您的模型不是唯一的將是很好的讓它這樣
user = User.objects.filter(phone_number=phone_number).first()
所以你會防止MultipleObjectsReturned錯誤。
但我建議你做那個電話號碼 unique=True
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/348916.html
標籤:姜戈 django-views
上一篇:在Django模型的類Meta中定義models.Index或models.UniqueConstraint是否有任何意義,如果managed=False
