Как вычислить возраст, используя Django с формой на основе классов, шаблонов и gijgo datepicker?
Я прочитал это сообщение и считаю, что мое совершенно другое; Django Datepicker calculate age
Я использую Django версии 4.0.1. Я использую Gijgo datepicker для получения даты рождения регистрирующегося человека. В свой шаблон base.html я добавил следующее:
<script src="https://unpkg.com/gijgo@1.9.13/js/gijgo.min.js" type="text/javascript"></script>
<script>$('.dateinput').datepicker({ format: 'yyyy-mm-dd' });</script>
В моем шаблоне register.html я расширяю базовый шаблон. Форма в шаблоне register использует метод POST. Код следующий:
<form method="POST">
{% csrf_token %}
{{ form|crispy }}
С кнопкой отправки. Форма, которую я использую - это форма на основе класса в моем файле forms.py. Код для нее выглядит следующим образом:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from datetime import date
selection = [
('yes', 'Yes'),
('no', 'No')
]
class StudentApplicationForm(UserCreationForm):
email = forms.EmailField()
first_name = forms.CharField(max_length=70)
last_name = forms.CharField(max_length=150)
date_of_birth = forms.DateField()
previous_experience = forms.CharField(widget=forms.RadioSelect(choices=selection))
terms_and_conditions = forms.CharField(widget=forms.CheckboxInput())
class Meta:
model = User
fields = [
'first_name',
'last_name',
'date_of_birth',
'terms_and_conditions',
'previous_experience',
'username',
'email',
'password1',
'password2',
]
def clean_email(self):
email = self.cleaned_data.get('email')
email_count = User.objects.filter(email=email).count()
if email_count > 0:
raise forms.ValidationError('This email is already in use. Please select a different email!')
return email
def calc_age(self):
dob = self.cleaned_data.get('date_of_birth')
raise forms.ValidationError(int(dob))
return dob
Функция электронной почты работает. Сейчас я просто хочу посмотреть, что я получу от ввода date_of_birth, но я ничего не получаю на экране. Смотрите изображение ниже.
Любая помощь будет очень признательна.
Это работает сейчас. Единственная проблема заключается в том, что сообщение об ошибке отображается неправильно.`
def clean_date_of_birth(self):
date_of_birth = self.cleaned_data.get('date_of_birth')
dob = date_of_birth
today = date.today()
age = int(today.year) - int(dob.year) - ((int(today.month), int(today.day)) < (int(dob.month), int(dob.day)))
if int(age) < 18:
raise forms.ValidationError('Too young, parents must register you!')
return date_of_birth
Вы должны использовать метод clean_<valiable_name>