Как вычислить возраст, используя 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, но я ничего не получаю на экране. Смотрите изображение ниже.

enter image description here

Любая помощь будет очень признательна.

Это работает сейчас. Единственная проблема заключается в том, что сообщение об ошибке отображается неправильно.`

    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>

Вернуться на верх