5
在another post中,我提到我試圖使用allauth的email_confirmed信號將已確認的用戶的is_active字段更改爲true。但是,下面的代碼給我例外「用戶匹配查詢不存在」。django-allauth:如何正確使用email_confirmed信號將用戶設置爲活動
from allauth.account.signals import email_confirmed
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(email_confirmed)
def email_confirmed_(request, email_address, **kwargs):
user = User.objects.get(email=email_address)
user.is_active = True
user.save()
我試圖重新工作,並且仍然有類似的異常,「EmailAddress匹配查詢不存在」。
from allauth.account.signals import email_confirmed
from django.dispatch import receiver
from django.contrib.auth.models import User
from allauth.account.models import EmailAddress
@receiver(email_confirmed)
def email_confirmed_(request, email_address, **kwargs):
new_email_address = EmailAddress.objects.get(email=email_address)
user = User.objects.get(new_email_address.user)
user.is_active = True
user.save()
回溯是在這裏:
Environment:
Request Method: POST
Request URL: http://www.website.com/accounts/confirm-email/5901011619071fce757447ba146fe6312cb27bc0fee34d29665b857b479b49fc/
Django Version: 1.6.1
Python Version: 3.3.2
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'surveys',
'registration',
'django.contrib.sites',
'bootstrap3',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/usr/local/lib/python3.3/dist-packages/django/core/handlers/base.py" in get_response
114. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.3/dist-packages/django/views/generic/base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.3/dist-packages/django/views/generic/base.py" in dispatch
87. return handler(request, *args, **kwargs)
File "/usr/local/lib/python3.3/dist-packages/allauth/account/views.py" in post
204. confirmation.confirm(self.request)
File "/usr/local/lib/python3.3/dist-packages/allauth/account/models.py" in confirm
111. email_address=email_address)
File "/usr/local/lib/python3.3/dist-packages/django/dispatch/dispatcher.py" in send
185. response = receiver(signal=self, sender=sender, **named)
File "/home/username/website/webapp/mysite/views.py" in email_confirmed_
84. new_email_address = EmailAddress.objects.get(email=email_address)
File "/usr/local/lib/python3.3/dist-packages/django/db/models/manager.py" in get
151. return self.get_queryset().get(*args, **kwargs)
File "/usr/local/lib/python3.3/dist-packages/django/db/models/query.py" in get
307. self.model._meta.object_name)
Exception Type: DoesNotExist at /accounts/confirm-email/5901011619071fce757447ba146fe6312cb27bc0fee34d29665b857b479b49fc/
Exception Value: EmailAddress matching query does not exist.
這是令人困惑我,因爲我可以在兩個用戶表,並在我的數據庫,他們的「電子郵件地址」表都檢查電子郵件地址字段似乎有匹配的電子郵件地址。幫助將不勝感激!
或整潔'user = email_address.user' –
謝謝,爲我工作!第一個參數實際上是信號,至少在Django 1.9中是這樣;也許'請求'是一個欺騙性的名字。 – mrooney