У меня есть небольшие трудности с переопределением метода form_valid()
для CreateView
.
У меня есть ModelForm
, где пользователи могут зарегистрировать нового пациента.Форма обрабатывается CreateView
.Я переопределил form_valid()
метод представления, так как сначала мне нужно подвести пользователя к пациенту, а затем оценить, соответствуют ли данные пациента (т. Е. Данные в форме) определенным критериям.Если критерии не выполнены, пациент / форма не сохраняется, и пользователь получает сообщение об ошибке.Если они имеют право, пациент / форма сохраняется, и пользователь получает сообщение об успехе.Эта функциональность формы / представления работает - в приведенном ниже тестовом коде у меня есть логическое значение is_elitable, которое я заменим на соответствующие критерии позже.Когда is_eligible == True
модель сохраняется, и я получаю сообщение об успешном завершении, когда == False
не сохраняется, и я получаю сообщение error
.
Моя проблема заключается в обработке URL-адреса успеха и перенаправлении, если пациентне имеет праваЯ хотел бы, чтобы он вернулся к «информационной панели», которую я настроил, но каждый раз, когда я это делаю, я получаю
DisallowedRedirect at /dashboard/patients/register
Unsafe redirect URL with protocol 'accounts'
Если кто-то может предоставить понимание / предложения о том, как получить эту работу, будетс благодарностью.
Мой текущий код:
forms.py
class PatientRegisterForm(forms.ModelForm):
class Meta:
model = Patient
fields = ['first_name', 'last_name', 'is_eligible']
views.py
class PatientRegisterView(LoginRequiredMixin, CreateView):
model = Patient
form_class = PatientRegisterForm
template_name = 'patients/register.html'
success_url = 'accounts:dashboard'
def patient_eligible(self, test):
if not test.is_eligible:
return False
else:
return True
def form_valid(self, form):
form.instance.provider = self.request.user
test = form.save(commit=False)
if self.patient_eligible(test):
messages.success(self.request, 'Patient registered successfully!')
test.save()
return super().form_valid(form) # fails here if eligible
else:
messages.error(self.request, 'Patient not registered')
return redirect(self.request, 'accounts:dashboard') # fails here if not eligible