【发布时间】:2015-10-08 16:50:30
【问题描述】:
我正在使用 Django 的 forms.ModelForm 制作表单,但我不想使用
日期字段的默认格式(在我的语言环境中,即'%Y-%m-%d')。我不
记住为什么我想改变它,但在这一点上我决心弄清楚
无论如何问题是什么。
这个问题好像被问过很多次了,但大部分都是
略有不同,或者答案对我没有帮助。
这是我的表单类:
class RejectionForm(forms.ModelForm):
class Meta:
model = Rejection
fields = ['date',
'plant',
'part',
'defects',
'shift',
'station',
'worker',
'quantity',
'location',
'rejected_by',
'remark']
widgets = {
'date': forms.DateInput(attrs={'class': 'date'}, format='%m-%d-%Y')
}
error_css_class = 'danger'
我也试过这样:
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'
但这也没有用。也许出于完全不同的原因,但我得到了 摆脱它。从现在开始,我仍然会参考第一个示例。
我已经检查了提交表单时发送的 POST 数据,使用 Chrome 的
开发人员控制台,它使用我想要的格式发送它。什么时候
预先填充,已经存在的值也是正确的。所以我不认为
问题与客户端或表单的呈现方式有关。
看起来有点奇怪的是它确实验证我是否输入了日期
以默认格式。但它仍然以自定义格式呈现它。
此外,我已经在禁用 L10N 和 I18N 的情况下进行了尝试。我从 this的第二个回答 题。不幸的是(但也有点幸运),它没有用。
以防万一有人需要,这里有一个模板:
{% 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)
我不确定可能需要什么,所以请随时询问您是否想查看其他内容。
编辑:可能值得注意的是它在过去确实有效。我不确定它什么时候停止,但我记得在我开始玩 django-filter 之前它还在工作。
我决定不使用它,并删除了我为它添加的所有内容。我找不到任何东西,它甚至不需要编辑视图或表单,只需为过滤器添加一个新文件,并添加一个指向应用程序附带的基于类的视图的 URL。现在都不存在了。
【问题讨论】:
-
您的第二次尝试看起来是正确的,只是您的格式中有一个逗号 (
%m,-%d-%Y)。如果您删除逗号,它应该可以工作。 -
这行得通,谢谢。如果归根结底,我会以手动方式进行,但我仍然想知道为什么第一个不起作用。
-
添加了一个解释原因的答案。
标签: python django django-forms