Проблема с успешным / перенаправлением URL для функции ModelForm form_valid () - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть небольшие трудности с переопределением метода 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

1 Ответ

0 голосов
/ 28 сентября 2018

Прежде всего, я не думаю, что вам нужно передавать self.request в качестве первого параметра перенаправления.
Из документов перенаправление должно быть таким

redirect(to, permanent=False, *args, **kwargs)

Нонастоящая проблема, которая вызывает вашу ошибку, заключается в том, что вы не меняете URL.Что вам нужно сделать, это:

from django.shorcts import reverse_lazy
..
success_url = reverse_lazy('accounts:dashboard')
..
return redirect(reverse('accounts:dashboard'))
...