Проблема с профилем пациента и системой авторизации в Django
Сегодня я столкнулся с очень сложной проблемой в своем проекте. Идея проста, в модели врача у меня есть уникальный токен_connect_token, который нужен для связи пациента с конкретным врачом. В шаблоне профиля пациента я создал простую форму методом POST для получения этого токена от пациента. Пациент видит эту форму в своем профиле, если у него нет связанного доктора, и проходит аутентификацию. У меня возникла проблема с методом post в этом классе:
class PatientProfile(generic.DetailView):
model = Patient
template_name = 'patient_profile.html'
context_object_name = 'patient'
@staticmethod
def users_role(request):
user = request.user
is_patient = user.groups.filter(name='Patients').exists()
is_doctor = user.groups.filter(name='Doctors').exists()
return is_patient, is_doctor
def get_context_data(self, **kwargs):
self.object = self.get_object()
context = super().get_context_data(**kwargs)
is_patient, is_doctor = self.users_role(self.request)
context['is_patient'] = is_patient
context['is_doctor'] = is_doctor
context['link_form'] = DoctorLinkForm()
return context
def get_object(self, queryset=None):
if not hasattr(self, 'object'):
self.object = super().get_object(queryset)
return self.object
def post(self, request, *args, **kwargs):
patient_id = request.user.id
link_form = DoctorLinkForm(request.POST)
if link_form.is_valid():
token = link_form.cleaned_data['doctor_unique_token']
doctor = Doctor.objects.get(unique_connect_token = token)
patient = Patient.objects.get(pk = patient_id)
patient.doctor_id = doctor
patient.save()
return redirect('patient_profile', pk=request.user.id)
return self.render_to_response(self.get_context_data(link_form = link_form))
Когда метод POST работает успешно, мой пациент перенаправляется на ту же страницу, но UNLOG с сайта. И когда я пытаюсь войти в систему снова, я получаю сообщение, что пароль неверен, хотя данные введены на 100% правильно. Помогите пожалуйста, я действительно не понимаю, как решить эту проблему.
Я уже пробовал использовать request.user.refresh_from_db(), но это мне не помогло