【问题标题】:Django Tempus Dominus Datetimepicker time and date conversionDjango Tempus Dominus Datetimepicker 时间和日期转换
【发布时间】:2019-08-14 08:09:34
【问题描述】:

我已经尝试了几个小时来更改我的 datetimepicker 的格式(用于引导 4 的 Tempus DOminus),但格式不会改变,所以现在我正在尝试找到一种更好的方法来在后端转换它插入到我的 Django 模型或数据库中。

问题是,日期时间选择器当前将用户选择的日期放入输入中

2018 年 10 月 2 日下午 2:15

问题是,我需要像这样将它插入到数据库中:

2018-10-02 02:15:00

有没有更好的方法可以自动转换它以适应我需要的 djano 模型时间戳格式?

我认为必须有一种方法让我从 datetimepicker 中查看 AM/PM 并相应地将其设为 02:00:00 或 14:00:00。

在我的 model.py 中

from django.db import models

class CountryDirectorRequestTable(models.Model):
    countryDirectorRequestTo = models.CharField(max_length=50,choices=REQUEST_TO, default='accountant',verbose_name="Request To")
    countryDirectorRequestDetail = models.TextField(max_length=3000,null=False,blank=False, verbose_name="Request Detail",help_text="Content not more than 3000 letters")
    countryDirectorRequestExpectingDateAndTime = models.DateTimeField(default=timezone.now, verbose_name="Expecting Date and Time")

在我的 form.py 中

from django import forms
from Home.models import CountryDirectorRequestTable
from tempus_dominus.widgets import DateTimePicker

class CountryDirectorRequestForm(forms.ModelForm):
countryDirectorRequestExpectingDateAndTime = forms.DateTimeField(widget=DateTimePicker(
    options={
        'useCurrent': True,
        'collapse': False,
        'minDate': '2009-01-20',
        'maxDate': '2017-01-20',

        # Calendar and time widget formatting
        'time': 'fa fa-clock-o',
        'date': 'fa fa-calendar',
        'up': 'fa fa-arrow-up',
        'down': 'fa fa-arrow-down',
        'previous': 'fa fa-chevron-left',
        'next': 'fa fa-chevron-right',
        'today': 'fa fa-calendar-check-o',
        'clear': 'fa fa-delete',
        'close': 'fa fa-times'
    },
    attrs={
        'append': 'fa fa-calendar',
        'icon_toggle': True,

    }
)
)
class Meta:
    model = CountryDirectorRequestTable
    fields = ('countryDirectorRequestTo', 'countryDirectorRequestDetail','countryDirectorRequestExpectingDateAndTime')

在我看来.py

from django.shortcuts import render, redirect
from .form import CountryDirectorRequestForm


def countryDirectorRequestView(request):
if request.method == 'POST':
    form = CountryDirectorRequestForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('countryDirector:countryDirectorRequest_detail')
else:
    form = CountryDirectorRequestForm()
return render(request, 'CountryDirector/countryDirectorRequest.html',{'form':form})

日期选择器正确呈现,但单击提交按钮后出现验证错误:“输入有效日期/时间)

【问题讨论】:

标签: python django django-models django-forms


【解决方案1】:

我能够得到这个工作。我发现的问题是minDatemaxDate 必须作为datetime 值而不是date 值提供。

也就是说,这是不正确的:

'minDate': '2009-01-20',
'maxDate': '2017-01-20',

相反,这是正确的:

'minDate': '2009-01-20 00:00:00',
'maxDate': '2017-01-20 23:59:59',

在视图中,也一定要使用TestForm 而不是TestForm()

也是一个友好的提示,您可能需要查看 PEP-8 语法和代码格式化程序 Black 以了解 Python 编码约定。多年来,我发现它为我节省了很多时间、精力和挫败感。 https://black.readthedocs.io/en/stable/

下面是工作示例:

models.py

​​>
from django.db import models
from django.utils import timezone


class CountryDirectorRequestTable(models.Model):
    countryDirectorRequestExpectingDateAndTime = models.DateTimeField(
        default=timezone.now,
        verbose_name="Expecting Date and Time",
    )

forms.py

​​>
from django import forms

from .models import CountryDirectorRequestTable

from tempus_dominus.widgets import DateTimePicker


class TestForm(forms.ModelForm):
    country_director = forms.DateTimeField(
        widget=DateTimePicker(
            options={
                'useCurrent': True,
                'collapse': False,
                'minDate': '2009-01-20 00:00:00',
                'maxDate': '2017-01-20 23:59:59',

                # Calendar and time widget formatting
                'time': 'fa fa-clock-o',
                'date': 'fa fa-calendar',
                'up': 'fa fa-arrow-up',
                'down': 'fa fa-arrow-down',
                'previous': 'fa fa-chevron-left',
                'next': 'fa fa-chevron-right',
                'today': 'fa fa-calendar-check-o',
                'clear': 'fa fa-delete',
                'close': 'fa fa-times'
            },
            attrs={
                'append': 'fa fa-calendar',
                'icon_toggle': True,
            }
        )
    )

    class Meta:
        model = CountryDirectorRequestTable
        fields = (
            'country_director',
        )

views.py

​​>
from django.shortcuts import render, redirect
from .forms import TestForm


def test_view(request):
    if request.method == 'POST':
        form = TestForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('test-form')
    else:
        form = TestForm

    return render(
        request,
        'test_app/test.html',
        {'form': form},
    )

我希望这会有所帮助 - 祝你好运!

【讨论】:

  • 现在运行良好,非常感谢您的技术支持。还要感谢有关 PEP-8 语法和代码格式化程序 Black 的见解。我还有更多要学。
  • Django-Tempus-Dominus 很棒
  • 感谢您的客气话,欢迎来到 Stack Overflow。大部分功劳归于 Tempus Dominus 库的维护者!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
相关资源
最近更新 更多