django - Django 使用 RangeWidget 验证表单
问题描述
我有一个表格:
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['name', 'description', 'slot',]
widgets = {
'slot': RangeWidget(forms.DateTimeInput()),
}
我在视图中收到表单:
if request.POST:
form = MyForm(data=request.POST)
if form.is_valid():
但是表单从未经过验证,因为发布的参数是:
name: 'TEST', description : 'fsd', slot_0: '2018/05/15 21:00:00', slot_1: '2018/05/15 21:30:00', submit: 'submit'
form.errors 是:
Enter a valid date/time.
我假设 django 会自动为发布的值创建一个日期时间对象的元组,但显然不是。如何验证此表单并将其保存到数据库中?
解决方案
您的日期时间格式不正确。尝试添加以下内容作为__init__
表单的方法以匹配发布数据的格式:
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
for field in self.fields['slot'].fields:
field.input_formats.append("%Y/%m/%d %H:%M:%S")
另一种解决方案是在发送到服务器之前格式化数据。在这种情况下,您可以发送例如“2018-05-15 21:00:00”,它将与input_formats
列表中已存在的格式匹配。
推荐阅读
- arrays - 如何将 Minizinc 中的变量约束为集合的一部分
- python - 在反向代理 (traefik) 后面使用 phyton 的 http.server 时获取“404”
- f# - 如何使用 xUnit 测试 F# 选项类型
- sqlcmd - SQLCMD 实用程序:与第二个实例的连接不起作用
- python - 无法使用 popen 重定向 IO
- python - 带有验证的会话帖子在 python3.7.2 中不起作用
- c# - 如何使用 Entity Framework Core 和 Npgsql 清理我的所有字符串输入?
- python - 如何使用 Pandas 执行 first() 和 max() groupby 的等效(来自 SQL)?
- r - dplyr 函数 group_by 几个变量
- python - RASA X 路径“config.yml”不存在。请确保使用默认位置 ('config.yml') 或使用 '--config' 指定它