gpt4 book ai didi

django - 提交具有自定义日期格式的表单时出现 ValidationError

转载 作者:行者123 更新时间:2023-12-05 07:41:12 28 4
gpt4 key购买 nike

提交 Django 表单时出现 ValidationError。

在我的表单中,这是我的输入:01/01/2017但是 django 告诉我格式必须是 'AAAA-MM-GG'。
出现此异常位置:/usr/local/lib/python3.5/dist-packages/django/db/models/fields/init.py in to_python, line 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 = False 之后,我当然尝试在我的 settings.py 上使用 DATE_INPUT_FORMATS = ['%d/%m/%Y']

我也尝试在 for 循环的 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”的日期。

感谢所有愿意花时间帮助我的人!

最佳答案

当您在表单上声明变量时,您需要在 DateInput 小部件上设置格式,加上 input_formats,例如:

data_quota = forms.DateField(widget=forms.DateInput(format ='%d/%m/%Y'), input_formats=('%d/%m/%Y',), required=False) 

关于django - 提交具有自定义日期格式的表单时出现 ValidationError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532321/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com