Python Django 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,

我正在使用Django的forms.ModelForm创建表单,但我不想使用 日期字段的默认格式(在我的语言环境中,即
“%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)