提交django表單時出現ValidationError錯誤。使用自定義日期格式提交表單時出現ValidationError
以我的形式,這是我的輸入:01/01/2017 但Django告訴我,格式必須是'AAAA-MM-GG'。
與此異常地點:/usr/local/lib/python3.5/dist-packages/django/db/models/fields/ 初始化的.py在to_python,線路1271
這是對我的代碼項目:
# models.py
class Archivio(models.Model):
sys_codice = models.AutoField(primary_key=True)
some_other_field ...
class QuoteIscrizione(models.Model):
sys_chiave = models.AutoField(primary_key=True)
sys_cod = models.ForeignKey(Archivio, on_delete=models.CASCADE)
data_quota = models.DateField(blank=True, null=True)
# forms.py
class ArchivioSearchForm(forms.Form):
data_quota = forms.DateField(widget=forms.DateInput(format='%d/%m/%Y'), input_formats=('%d/%m/%Y',), required=False)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self:
field.field.widget.attrs['class'] = 'form-control '
if type(field.field.widget) is DateInput:
field.field.widget.attrs['class'] += 'datepicker'
def clean(self):
data_quota = self.cleaned_data['data_quota']
return self.cleaned_data
# views.py
def ArchivioSearchView(request):
model = Archivio
form = ArchivioSearchForm()
if request.GET.get('data_quota'):
selection = Archivio.objects.filter(Q(quoteiscrizione__data_quota__gte=request.GET.get('data_quota'))
return render(request, 'search_template.html', {'selection':selection, 'form':form})
# search_template.html
<form action="" method="get" class="form-horizontal">
<div class="form-group form-group-md">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{% for field in form %}
<div class="form-group row">
<label class="col-md-3 col-form-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
<div class="col-md-6">
{{ field.as_widget() }}
</div>
</div>
{% endfor %}
<input type="submit" value="Confermo" />
</div>
</form>
{% for select in selection %}
<h4><li><a href="{{ url('archivio_detail', args=[select.pk]) }}">{{ select.nominativo }}</a></li></h4>
{% endfor %}
而且我也有這個在我的settings.py
LANGUAGE_CODE = 'it-IT'
TIME_ZONE = 'Europe/Rome'
USE_I18N = True
USE_L10N = True
USE_TZ = True
我試圖打開USE_L10N後我當然settings.py使用=假 DATE_INPUT_FORMATS = [ '%d /%米/%Y']
我試圖也對INIT在我forms.py使用功能上循環:
if type(field.field.widget) is DateInput:
field.field.widget.input_formats = ['d%/%m/%Y']
我試圖不僅與詞典還可以使用類似'%d /%m /%Y'的字符串。
我也看到,即使我的輸入是2017/01/01,也會發生此錯誤!
我搞不清楚我做錯了什麼。即使我重寫DateField的每個可能的方法或參數,Django仍會繼續使用'YYYY-MM-DD'格式的日期。
感謝大家,這需要您一些時間來幫助我!
嗨,這是一個有趣的問題,但你可能要更改標題的東西比如「以自定義日期格式提交表單時出現ValidationError」,以幫助人們在僅查看標題時找到並理解您的問題。 –
感謝您的建議,我會馬上做到! –