Python 如何加上「;按用户名称或电子邮件地址搜索”;django中的字段忘记了密码

Python 如何加上「;按用户名称或电子邮件地址搜索”;django中的字段忘记了密码,python,django,django-forms,web-frameworks,Python,Django,Django Forms,Web Frameworks,这是django默认忘记密码表单。如何修改以添加“按用户名搜索”功能。例如“用户名/电子邮件”。有人能帮我吗。我是django的noob。刚开始学习 def get_users(self, email): active_users = UserModel._default_manager.filter(**{ '%s__iexact' % UserModel.get_email_field_name(): email, 'is_active': True

这是django默认忘记密码表单。如何修改以添加“按用户名搜索”功能。例如“用户名/电子邮件”。有人能帮我吗。我是django的noob。刚开始学习

def get_users(self, email):

    active_users = UserModel._default_manager.filter(**{
        '%s__iexact' % UserModel.get_email_field_name(): email,
        'is_active': True,
    })
    return (u for u in active_users if u.has_usable_password())

def save(self, domain_override=None,
         subject_template_name='registration/password_reset_subject.txt',
         email_template_name='registration/password_reset_email.html',
         use_https=False, token_generator=default_token_generator,
         from_email=None, request=None, html_email_template_name=None,
         extra_email_context=None):
    """
    Generate a one-use only link for resetting password and send it to the
    user.
    """
    email = self.cleaned_data["email"]
    for user in self.get_users(email):
        if not domain_override:
            current_site = get_current_site(request)
            site_name = current_site.name
            domain = current_site.domain
        else:
            site_name = domain = domain_override
        context = {
            'email': email,
            'domain': domain,
            'site_name': site_name,
            'uid': urlsafe_base64_encode(force_bytes(user.pk)),
            'user': user,
            'token': token_generator.make_token(user),
            'protocol': 'https' if use_https else 'http',
            **(extra_email_context or {}),
        }
        self.send_mail(
            subject_template_name, email_template_name, context, from_email,
            email, html_email_template_name=html_email_template_name,
        )

我们可以通过usign在电子邮件字段和
用户名
字段中搜索:


谢谢你,威廉。这部分呢。context={'email':email}@ashley:通常它只接受在文本框中输入的值(该文本框的名称显然是
email
,因此不应更改)。请参阅上下文部分。它从上下文部分的userinput获取电子邮件地址
from django.db.models import Q

def get_users(self, email):
    active_users = UserModel._default_manager.filter(
        Q(**{'%s__iexact' % UserModel.get_email_field_name(): email}) |
        Q(username=email),
        is_active=True
    )
    return (u for u in active_users if u.has_usable_password())
def save(self, domain_override=None,
         subject_template_name='registration/password_reset_subject.txt',
         email_template_name='registration/password_reset_email.html',
         use_https=False, token_generator=default_token_generator,
         from_email=None, request=None, html_email_template_name=None,
         extra_email_context=None):
    """
    Generate a one-use only link for resetting password and send it to the
    user.
    """
    email = self.cleaned_data["email"]
    for user in self.get_users(email):
        if not domain_override:
            current_site = get_current_site(request)
            site_name = current_site.name
            domain = current_site.domain
        else:
            site_name = domain = domain_override
        email = getattr(user, UserModel.get_email_field_name())
        context = {
            'email': email,
            'domain': domain,
            'site_name': site_name,
            'uid': urlsafe_base64_encode(force_bytes(user.pk)),
            'user': user,
            'token': token_generator.make_token(user),
            'protocol': 'https' if use_https else 'http',
            **(extra_email_context or {}),
        }
        self.send_mail(
            subject_template_name, email_template_name, context, from_email,
            email, html_email_template_name=html_email_template_name,
        )