我正在使用Django的forms.ModelForm,但我不想使用 默認格式的日期字段(在我的區域設置,這是'%Y-%m-%d'
)。我不 記得爲什麼我想改變它,但在這一點上,我決心圖 出了什麼問題無論如何。
似乎這個問題已被多次詢問,但其中大多數與 略有不同,或者答案對我沒有幫助。Django ModelForm沒有正確驗證自定義日期格式
這是我的表單類:
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'
但沒有工作,要麼。也許出於完全不同的原因,但我得到了 擺脫它。從現在開始,我仍然會提到第一個例子。
我檢查了我提交表單時使用Chrome的 開發者控制檯發送的POST數據,它使用我想要的格式發送它。當預填充 時,那裏的值也是正確的。所以我不認爲 問題與客戶端或表單的呈現方式有關。
似乎有點奇怪的是,它確實驗證如果我以默認格式鍵入日期 。但它仍然以自定義格式呈現。
此外,我已經嘗試禁用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')命名逗號之外,第二次嘗試看起來正確。它應該工作,如果你刪除逗號。 – solarissmoke
工作,謝謝。如果涉及到它,我會用手動方式來做,但我仍然想知道_why_第一個不起作用。 – damienmh
已添加解釋原因的答案。 – solarissmoke