Django创建CreateView所需的布尔字段

时间:2018-06-24 15:50:56

标签: django django-models django-forms

我有一个模型,需要用户在继续之前选中复选框。如果未选中此复选框,则浏览器不应允许用户继续提交表单(简单,对吗?)

我正在使用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 :(得分:0)

我的建议是为该字段添加一种自定义验证方法,该格式要求该字段等于True才能通过验证。

## 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')