Как ограничить пользователя, чтобы выбрать дату в диапазоне лет в Django? - PullRequest
3 голосов
/ 16 февраля 2011

models.py

class Completion(models.Model):
    start_date = models.DateField()
    end_date = models.DateField()
    batch = models.ForeignKey(Batch)
    topic = models.ForeignKey(Topic)

В приведенном выше коде DateField() генерирует виджет выбора даты на сайте администратора, где вы можете выбрать правильную дату или ввести ее вручную в текстовое поле. Проблемы:

  1. Как ограничить пользователя, чтобы выбрать дату, которая под 2000 года до 2100.

  2. когда пользователь вручную вводит дату в текстовое поле, он принимает любую дату в формате yy-mm-dd. Мне нужна проверка, поэтому не следует вводить несуществующую дату.

1 Ответ

9 голосов
/ 16 февраля 2011

Проверить валидаторы !

Сначала определите ваш валидатор:

from django.core.exceptions import ValidationError

def validate_current_century(value):
    if value < 2000 or value > 2100:
        raise ValidationError(u'%s is not a valid year!' % value)

Теперь вы можете использовать его в поле вашей модели:

class Completion(models.Model):
    start_date = models.DateField(validators=[validate_current_century])
    end_date = models.DateField(validators=[validate_current_century])

А также в поле формы:

from django import forms

class MyForm(forms.Form):
    current_century_field = forms.DateField(validators=[validate_current_century])

Подробнее в документации, ссылка на которую приведена выше.

...