Django делает логическое поле обязательным для CreateView - PullRequest
0 голосов
/ 24 июня 2018

У меня есть модель, в которой пользователю необходимо установить флажок перед тем, как продолжить. Если флажок не установлен, браузер не должен позволять пользователю продолжать отправку формы (просто, верно?)

Я использую CreateView для обработки этой модели, и ... она не работает - можно отправить форму, не устанавливая флажок (patient_agreement BooleanField).

Как сделать этот флажок обязательным для этого CreateView CBV?

Вот моя модель:

class Patient(models.Model):

    name = models.CharField(max_length=30, blank=False, verbose_name=_('Name'))
    surname = models.CharField(max_length=70, blank=False, verbose_name=_("Surname"))
    patient_agreement = models.BooleanField(
          blank=False,
          verbose_name=_("Patient has been notified about GDPR and his right to his data"),
          help_text=_("Mark only if you have informed the patient about his rights in the GDPR context"),

    )

И это мое мнение:

class NewPatientFormView(LoginRequiredMixin, CreateView):
    model = Patient
    fields = ['name', 'surname','patient_agreement']

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.created_by_user = self.request.user
        # self.object.save()
        return super().form_valid(form)

Как сделать флажок обязательным для отправки формы?!

1 Ответ

0 голосов
/ 26 июня 2018

Мое предложение было бы добавить пользовательский метод проверки для поля в форме, которая требует, чтобы оно равнялось Истине для проверки.

## forms.py

class PatientForm(Form):

...

    def clean_patient_agreement(self):
        pa_value = self.cleaned_data.get('patient_agreement',False)

        ## Return value if True (checked)
        if pa_value:
            return pa_value

        ## Raise exception if not checked
        raise ValidationError('Must check patient agreement box to proceed')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...