在Django TimeField中使用django-bootstrap3-datetime输入有效时间

2 投票
1 回答
3892 浏览
提问于 2025-04-18 02:18

我在用Django的Bootstrap日期时间选择器提交表单时遇到了时间验证的问题。当我提交这个表单时,出现了“请输入一个有效的时间。”的错误提示。

models.py:

class Appointment(models.Model):
    date = models.DateField()
    time = models.TimeField()

forms.py:

valid_time_formats = ['%P', '%H:%M%A', '%H:%M %A', '%H:%M%a', '%H:%M %a']

date = forms.DateField(
    widget=DateTimePicker(options={"format": "MM/DD/YYYY",
                                   "pickTime": False,
                                   "showToday": True,
                                   }))

time = forms.TimeField(
    widget=DateTimePicker(options={
                                   "pickTime": True,
                                   "pickDate": False,
                                   "minuteStepping": 1,
                                   "sideBySide": True,
                                   }),
    input_formats = valid_time_formats
    )


class Meta:
    model = Appointment
    fields = (
        'date',
        'time',
        'duration',
        'cost',
    )

如果有帮助的话,模板如下:

{% extends 'scheduling/base_scheduling.html' %}
{% load bootstrap3 %}

{% block title %}New Appointment{% endblock %}

{% block external %}

        <link rel="stylesheet"
              href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.css">
        <link rel="stylesheet"
              href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.css">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.js">
        </script>
        <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.js">
        </script>

        {{ form.media }}

{% endblock %}

{% block content %}


    {# Load CSS and JavaScript #}

    {% bootstrap_css %}
    {% bootstrap_javascript %}

    {# Display django.contrib.messages as Bootstrap alerts #}
    {% bootstrap_messages %}

    {# Display a form #}

    <h1>New Appointment for {{client.full_name}}</h1>
    <form action="{% url 'client_appointment_add' client.id %}" method="post" class="form">
        {% csrf_token %}
        {% bootstrap_form form %}
        {% buttons %}
            <button type="submit" class="btn btn-primary">
                {% bootstrap_icon "save" %} Submit
            </button>
        {% endbuttons %}
    </form>

{% endblock %}

1 个回答

0

我也遇到过同样的错误。仅仅在表单中设置日期格式是不够的。

我通过正确配置我的Django日期时间设置解决了这个问题。

想知道怎么做得对,可以看看我在这里的回答:如何在Django管理后台将DateTimeField格式化为当地时间? 在那里你还会找到一个示例项目的链接,里面有正确的配置。

我现在用bootstrap3_datetimebootstrap3测试过了,效果很好,所以你也应该能用。

撰写回答