Django PasswordResetForm не отправляет электронные письма
У меня есть следующая функция, управляющая добавлением нового сотрудника в выбранный цех,
def add_employee(request, shop_number):
workshop = get_object_or_404(Workshop, shop_number=shop_number)
context = {"workshop": workshop}
if request.method == "POST":
form = ProfileForm(request.POST, files=request.FILES)
if form.is_valid():
employee = form.save(commit=False)
employee.added_by = request.user
# Create the user associated with the employee with an unusable password
employee_user = get_user_model().objects.create_user(
username=request.POST['email'],
email=request.POST['email'],
password=None, # No password is set
first_name=request.POST['first_name'],
last_name=request.POST['last_name']
)
employee_user.set_unusable_password()
employee_user.save()
employee.user = employee_user
employee.save()
# Add the new employee to the workshop's employees
workshop.employees.add(employee)
# Conditionally add the employee to groups based on their role
if employee.is_craftman:
group, created = Group.objects.get_or_create(name='craftmen')
group.user_set.add(employee_user)
elif employee.is_salesman:
group, created = Group.objects.get_or_create(name='salesmen')
group.user_set.add(employee_user)
# Send a password reset email to the user
form = PasswordResetForm({'email': employee_user.email})
print(employee_user.email)
if form.is_valid():
request.current_site = get_current_site(request)
form.save(
request=request,
use_https=request.is_secure(),
email_template_name='registration/password_reset_email.html',
subject_template_name='registration/password_reset_subject.txt',
from_email=settings.EMAIL_HOST_USER,
)
else:
print(form.errors)
print(form)
messages.success(request, f"You have successfully added {\
employee}")
return redirect('manage_employees', shop_number=shop_number)
else:
context['form'] = form
else:
context['form'] = ProfileForm()
return render(request, 'employees/employees_form.html', context)
Код правильно печатает электронную почту сотрудника, но пользователь не получает письмо со сбросом пароля. Другие части кода успешно отправляют электронные письма, но эта секция и стандартное представление сброса пароля не доставляют письма. Я подтвердил, что конкретное электронное письмо существует в базе данных. Может ли кто-нибудь помочь определить потенциальные проблемы, препятствующие доставке письма о сбросе пароля?
Я понял, в чем дело. Метод get_users в PasswordResetForm также отфильтровывает пользователей с непригодным паролем, поэтому они тоже не получают писем. Вам придется либо назначить какой-то тип пароля для этих пользователей, либо переопределить этот метод в форме, чтобы не отфильтровывать их по этому условию.