Django 表单不接受来自 DateTimePicker 的 DateTime



我正在开发一个待办事项 Web 应用程序,并让用户使用自定义引导日期时间选择器从这里输入事件日期时间。我在格式化为 MM/DD/YY hh:mm A 的表单上有自定义小部件。但是,Django 不接受这种形式。已经提出了类似的问题,但我希望表单以某种格式显示,但以默认格式存储在数据库中,而不是覆盖默认的 DateTimeInput。我正在考虑使用小部件调整来自定义选择器,但我不知道如何以默认格式存储它。最好的方法是什么?

Forms.py

from bootstrap_modal_forms.forms import BSModalForm
from .widgets import BootstrapDateTimePickerInput
from bootstrap_datepicker_plus import DateTimePickerInput
from .models import ToDoItem
class NewEventForm(BSModalForm):
class Meta:
model = ToDoItem
fields = ['title', 'description', 'start_time', 'end_time', 'remind_time']
widgets = {
'start_time': DateTimePickerInput(
options={"format": "MM/DD/YYYY hh:mm A"}
), 
'end_time': DateTimePickerInput(
options={"format": "MM/DD/YYYY hh:mm A"}
),
'remind_time': DateTimePickerInput(
options={"format": "MM/DD/YYYY hh:mm A"}
),
}     

活动形式:

{% load bootstrap4 %}
{% load static %}
{% bootstrap_css %}   
{% bootstrap_javascript jquery='full' %}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- Custom Stylesheet -->
<link rel="stylesheet" type="text/css" href="{% static 'main/main.css' %}">
<!-- Moment.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js" integrity="sha256-VBLiveTKyUZMEzJd6z2mhfxIqz3ZATCuVMawPZGzIfA=" crossorigin="anonymous"></script>
{{ form.media }} 
</head>
<body>
<form method="POST" action=""> 
{% csrf_token %}
<div class="modal-header">
<h5 class="modal-title">New Event</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body"> 
<fieldset class="form-group">
{% bootstrap_form form %}
</fieldset> 
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="submit-btn btn btn-primary">Create</button>
</div>
</form>
</body>
</html>

您可以使用至少 3 个众所周知的 JS 日期/时间操纵器和本机堆栈在前端执行此操作。你可以在后端使用django的工具,python datetime库,一个名为dateparse的库,dateparser,python dateutil等。

这是一个常见的问题(例如学校论文(:)

但是对您有所帮助的一件事是知道表单字段有一个名为to_python()的方法:您可以子类化日期时间字段并覆盖该方法。

您不必照顾回去的路,但是为了完整起见,如果您愿意,那将是Widget.format_value().

在后端(或实际上人类不必查看它的任何地方(使用的最佳格式是 Iso8601。

最新更新