Python Django ModelForm未使用自定义日期格式正确验证
我正在使用Django的forms.ModelForm创建表单,但我不想使用 日期字段的默认格式(在我的语言环境中,即Python Django ModelForm未使用自定义日期格式正确验证,python,django,django-forms,Python,Django,Django Forms,我正在使用Django的forms.ModelForm创建表单,但我不想使用 日期字段的默认格式(在我的语言环境中,即“%Y-%m-%d”)。我不 还记得我为什么想改变它吗,但现在我决定 找出问题所在。 这个问题似乎被问了很多次,但大多数都是 稍有不同,或者答案对我没有帮助 这是我的表单类: 我也试过这样做: class RejectionForm(forms.ModelForm): date = forms.DateField( input_formats=['%m,
“%Y-%m-%d”
)。我不
还记得我为什么想改变它吗,但现在我决定
找出问题所在。这个问题似乎被问了很多次,但大多数都是 稍有不同,或者答案对我没有帮助 这是我的表单类: 我也试过这样做:
class RejectionForm(forms.ModelForm):
date = forms.DateField(
input_formats=['%m,-%d-%Y'],
widget=forms.DateInput(
attrs={'class': 'date'},
format='%m-%d-%Y'
)
)
class Meta:
model = Rejection
fields = ['date',
'plant',
'part',
'defects',
'shift',
'station',
'worker',
'quantity',
'location',
'rejected_by',
'remark']
error_css_class = 'danger'
但这也没用。也许是完全不同的原因,但我
摆脱它。从现在起,我仍将参考第一个示例
我已经使用Chrome浏览器检查了提交表单时发送的POST数据
开发人员控制台,它使用我想要的格式发送。什么时候
预填充,已经存在的值也是正确的。所以我不认为
问题与客户端或表单的呈现方式有关。似乎有点奇怪的是,如果我输入日期,它确实会验证 以默认格式。但它仍然以自定义格式呈现 此外,我还尝试过禁用L10N和I18N。我是从你那里得到这个主意的 第二个答案 问题。不幸的是(但也有点幸运),它没有起作用 以防有人需要,以下是其中一个模板: 我不确定到底需要什么,所以如果你想看其他东西,请尽管问 编辑:可能值得注意的是,它在过去确实有效。我不确定它什么时候停止,但我记得在我开始玩之前它就开始工作了。
我决定不使用它,并删除了为它添加的所有内容。我找不到剩下的了,它甚至没有要求编辑视图或表单,只是为过滤器添加了一个新文件,并添加了一个指向应用程序附带的基于类的视图的URL。这两种方法现在都不存在。作为回应,第一种方法不起作用的原因是
DateInput
上的format
参数仅控制此字段初始值的显示格式。(摘自)
它不控制如何解析提交的数据-即,DateField
仍将尝试使用其默认格式解析提交的数据。若要更改,您需要DateField
()上的input\u formats
参数
所以,实际上,你需要设置两个,就像你在第二次尝试中所做的那样。唯一的问题是你的格式中有一个错误的逗号
如果在整个项目中使用一致的日期格式,则可以使用将正确配置
日期字段
和日期输入
以使用相同格式的设置。这样,您就不必单独指定它。您的第二次尝试看起来是正确的,只是格式中有一个逗号(%m,-%d-%Y
)。如果你去掉逗号,它应该会起作用,谢谢。如果归结到这一点,我会用手工的方式,但我仍然想知道为什么第一个不起作用。我已经添加了一个解释为什么的答案。这是有道理的。我想我只是认为Django会假设在响应中发送的格式与它返回的格式相同。也许我之前添加了一些东西,让它发挥作用,然后就忘了。无论如何,谢谢!
class RejectionForm(forms.ModelForm):
date = forms.DateField(
input_formats=['%m,-%d-%Y'],
widget=forms.DateInput(
attrs={'class': 'date'},
format='%m-%d-%Y'
)
)
class Meta:
model = Rejection
fields = ['date',
'plant',
'part',
'defects',
'shift',
'station',
'worker',
'quantity',
'location',
'rejected_by',
'remark']
error_css_class = 'danger'
{% extends 'defective/base.html' %}
{% block content %}
<form action="{% url 'defective:edit-id' rej_id=rej_id %}" method="POST" id="rejection_form" class="form-group create-form">
{% csrf_token %}
<table class="table table-hover">
{{ form.as_table }}
</table>
<input type="submit" value="Save and view" class="btn btn-primary"><br>
</form>
<script>
$('.date').datepicker({dateFormat: 'mm-dd-yy'});
</script>
{% endblock %}
instance = get_object_or_404(Rejection, pk=rej_id)
form = RejectionForm(request.POST, instance=instance)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('defective:view-id', kwargs={'rej_id': rej_id}))
else:
context = {'title': 'Edit an entry',
'rej_id': rej_id,
'form': form}
return render(request, 'defective/edit.html', context)