django Введите правильную дату.Ошибка проверки - PullRequest
9 голосов
/ 03 февраля 2012

Моя модель

 class Member(models.Model):

dob = models.DateField('dob')

форма

class MemberForm(ModelForm):
  dob = forms.DateField(required=False, input_formats='%Y-%m-%d')
  class Meta:
    model = Member
    exclude = ('profile',)   

код вида

if request.method == 'POST': # If the form has been submitted...
        signup_form = SignupForm(request.POST) # A form bound to the POST data
        # Create a formset from the submitted data
        member_formset = MemberFormSet(request.POST, request.FILES)
        # import pdb; pdb.set_trace()
        if signup_form.is_valid() and member_formset.is_valid():
          print 'in valid'
          signup = signup_form.save(request.POST)
          for form in member_formset.forms:
            member = form.save(commit=False)
            member.profile = signup
            # import pdb; pdb.set_trace()
            # print member.objects.all()
            member.save()
          return redirect("/main") # Redirect to a 'success' page

при отправке формы появляется сообщение об ошибке

Enter a valid date.

Что я должен сделать, чтобы решить эту проверку.

Ответы [ 4 ]

20 голосов
/ 03 февраля 2012

input_formats должен быть список, см.

пример:

['%Y-%m-%d',      # '2006-10-25'
'%m/%d/%Y',       # '10/25/2006'
'%m/%d/%y']       # '10/25/06'

https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.DateField

10 голосов
/ 03 февраля 2012

Я предпочитаю установить ** DATE_INPUT_FORMATS в settings.py, а затем определить поле следующим образом:

dob = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS)

Это более СУХОЙ, чем установка его для каждого поля формы.

Если это ввод текстового поля, я почти всегда помещаю принятый формат (ы) в поле help_text, чтобы пользователь мог знать, какой формат (ы) принят (ы).

2 голосов
/ 21 июля 2015

Вам не нужно добавлять новое поле, если у вас уже есть DateField в вашей модели.

Вам просто нужно установить input_formats для этого поля:

self.fields[ 'dob' ].input_formats = [ '%Y-%m-%d' ]

Ссылки: DateField и Локализация формата

0 голосов
/ 03 февраля 2012

input_formats - ваш друг.

Если вы принимаете javascript, то вы можете использовать в поле что-то вроде календаря jQuery (т. Е. Текстовое поле только для чтения, и нажатие на него вызовет код jquery).и всплывающее виджет календаря).Вы можете иметь этот виджет календаря в качестве отправной точки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...