我有一个模型,需要用户在继续之前选中复选框。如果未选中此复选框,则浏览器不应允许用户继续提交表单(简单,对吗?)
我正在使用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)
如何在提交表单之前选中所需的复选框?!
答案 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')