【问题标题】:Django: ValidationError: [u'Enter a valid date in YYYY-MM-DD format.']Django: ValidationError: [u'以 YYYY-MM-DD 格式输入有效日期。']
【发布时间】:2011-08-13 14:58:00
【问题描述】:

我有一个表单,用户从 jQuery datepicker 中选择一个日期,该日期被提交以创建一个 Proposal 对象。这个错误在测试中从未发生在我身上,但发生在我的实时服务器上的用户身上(我调试它的问题的一部分)。最奇怪的部分是对象是在数据库中创建的,即使错误出现在创建对象的行上。有什么想法吗?

日期在 Db 中是这样存储的:2011-08-17

错误: ValidationError: [u'以 YYYY-MM-DD 格式输入有效日期。']

src/views.py",第 1901 行,在 new_proposal 中 提案 = Proposal.objects.create(user=request.user, host=host, date=date)

HTML:

<form action="{% url new_proposal %}" method="post" accept-charset="utf-8" style="padding:0">{% csrf_token %}
<span>Date:</span>
<input type="date" name="date" id="datepicker" placeholder="yyyy/mm/dd"/>
<input type="hidden" name="host" id="{{profile.user.id}}" value="{{profile.user.id}}">
<input type="submit" value="Book it!" class="action">
</form>

查看:

@login_required
def new_proposal(request):
    host_id = request.POST.get('host')
    host = User.objects.get(id=host_id)

    date = request.POST.get('date')
    price = host.get_profile().price

    proposal = Proposal.objects.create(user=request.user, host=host, date=date)
    proposal.price = actual_price
    proposal.save()

在 Django 错误电子邮件中,日期似乎不在 POST 中,但它是在我调用 request.POST.get('date') 时。

     POST:<QueryDict: {u'date': [u''], u'csrfmidd

【问题讨论】:

  • 占位符显示“yyyy/mm/dd”。您确定这不是输入的格式吗?在对 proposal 的实例调用 save 之前,尝试将 request.POST.get('date') 的值打印到控制台,以查看它是否符合您的预期。
  • request.POST.get('date') 是 2011-08-18 。在错误之后,这似乎是正确的。

标签: django django-forms django-views


【解决方案1】:

我相信这是解决方案。为提案对象使用 ModelForm + DateField。然后在视图中:

if request.POST:

    if form.is_valid():

由于我没有亲身经历过这个错误,我仍然不确定 - 但我的视图和表单现在是正确的 Django 格式。

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 2016-05-30
    • 2011-06-20
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多