【问题标题】:Django: Form widget not accepting date format provided by bootstrapdatetimepickerDjango:表单小部件不接受 bootstrapdatetimepicker 提供的日期格式
【发布时间】:2018-01-31 12:26:00
【问题描述】:

我有以下问题:我有一个 django 表单,它使用“bootstrapdatetimepicker”小部件作为日期时间字段。但是,当我尝试发布表单时,它会引发“格式无效”错误。

我使用的是本地(荷兰语)时间格式,但我在 forms.py 代码中都包含了这种新格式(见下文)

    class Meta:
    model = Quotation
    fields = [
        'full_name',
        'organisation',
        'address',            
        'date',
        'type',            
        'description',
        'budget',
    ]

    widgets = {'date': DateTimeInput(
        attrs={'id': 'datetimepicker1'},
        format='%d-%m-%Y %H:%M:%S')}

在模板中也是如此,

    <div class="col-md-12 speaker-form" id="offerte">            
        {% csrf_token %}
        {% crispy form %}
    </div>


<script>

        $(function () {

            $('#datetimepicker1').datetimepicker({
                format:'DD-MM-YYYY HH:mm:ss',
                defaultDate: new Date(),
                icons: {
                    up: "fa fa-chevron-circle-up",
                    down: "fa fa-chevron-circle-down",
                    next: 'fa fa-chevron-circle-right',
                    previous: 'fa fa-chevron-circle-left',                        
                }
            });
        });

    </script>

有谁知道我做错了什么?为什么我在 Python 和 Javascript 代码中的“格式”覆盖不能正常工作?

【问题讨论】:

    标签: django django-forms bootstrap-datetimepicker


    【解决方案1】:

    似乎 JS 库和 DateTimeInputField 已正确配置为允许新的日期时间格式,但模型无法验证新的日期时间格式。因此,它不会保存数据。

    如果正确,可以修改settings.py 以允许不同的输入格式。 请确保 USE_L10N = False 否则它将覆盖下面列出的自定义格式。

    settings.py的底部添加以下内容:

    from django.conf.global_settings import DATETIME_INPUT_FORMATS, DATE_INPUT_FORMATS
    DATE_INPUT_FORMATS += ("%d-%m-%Y",)
    DATETIME_INPUT_FORMATS += ("%d-%m-%Y %H:%M:%S",)
    

    【讨论】:

    • 不幸的是,“input_formats”参数引发“意外关键字”异常
    • 我刚刚意识到这可能是因为 S 之前缺少 % 符号。我只是把它扔到我的 IDE 中,它产生了一个错误。换一个试试?
    • 好收获!我修正了错字,不幸的是它没有解决问题
    • 我能够重新创建您的问题,然后找到了适用于我的设置的解决方案 - 在您的 settings.py 底部尝试此操作并重新启动服务器?设置USE_L10N = False。如果可行,将编辑我的答案,使其更完整。 3行(不能格式化):from django.conf.global_settings import DATETIME_INPUT_FORMATS, DATE_INPUT_FORMATS DATE_INPUT_FORMATS += ("%d-%m-%Y",) DATETIME_INPUT_FORMATS += ("%d-%m-%Y %H:%M:%S",)
    【解决方案2】:

    我遇到了同样的问题,我通过在 ModelForm 中定义字段来解决它:

    date = forms.DateTimeField(input_formats=['%d-%m-%Y %H:%M:%S']
    
    class Meta:
        model = Quotation
        fields = [
            'full_name',
            'organisation',
            'address',            
            'date',
            'type',            
            'description',
            'budget',
        ]
        def __init__(self, *args, **kwargs):
            super(YourModelName, self).__init__(*args, **kwargs)
            self.fields['date'].widget.attrs.update({'class': 'form-control', 'id': 'm_datetimepicker_1'})
    

    还将您的 javascript 格式修改为 'dd-mm-yyyy hh:ii:ss'

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2014-09-23
      • 1970-01-01
      相关资源
      最近更新 更多