我的模特
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.
我该怎么做才能解决这个问题。
答案 0 :(得分:20)
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
答案 1 :(得分:10)
我更喜欢设置** DATE_INPUT_FORMATS 在settings.py中,然后定义如下字段:
dob = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS)
这比在每个表单字段中设置它更加干燥。
如果是文本字段输入,我几乎总是将接受的格式放在字段help_text
中,以便用户可以知道接受的格式是什么。
答案 2 :(得分:2)
模型中已有DateField
后,您无需添加新字段。
您只需为此字段设置input_formats
:
self.fields[ 'dob' ].input_formats = [ '%Y-%m-%d' ]
答案 3 :(得分:0)
input_formats
是你的朋友。
如果您接受javascript,那么您可以使该字段使用类似jQuery日历(即只读文本字段并单击它将调用jquery代码并弹出日历小部件)。您可以将this calendar widget作为起点。