我目前在尝试将CSV文件上传到Django Heroku CRM应用程序时遇到这个错误,该应用程序也使用Heroku Postgres DB:
Unable to upload file. ValidationError(['“” value has an invalid date format. It must be in YYYY-MM-DD format.'])
&
Unable to upload file. ValidationError(['“1995-03-28” value has an invalid date format. It must be in YYYY-MM-DD format.'])
下面是我目前使用的代码块:
- views.py
class LeadImportView(LoginRequiredMixin, FormView):
form_class = LeadImportForm
template_name = 'import_leads.html'
success_url = '/dashboard/leads/'
def form_valid(self, form):
df = pd.read_csv(io.StringIO(csv_file.read().decode('utf-8')))
for index, row in df.iterrows():
lead = Lead()
...
dob = row['DOB']
if str(dob).strip() == 'nan' or str(dob).strip() == "":
try:
lead.dob = None
except ValidationError:
lead.dob = None
else:
lead.dob = dob
...
lead.save()
messages.success(self.request, 'Leads successfully imported.')
# return redirect('leads:lead-list')
return super().form_valid(form)
- forms.py
class LeadForm(forms.Form):
...
dob = forms.DateField()
...
- models.py
class Lead(models.Model):
...
dob = models.DateField(max_length=10, blank=True, null=True)
...
正如您所看到的,如果CSV dob值为空,那么它应该等于DB中的None值。然而,无论DOB是否被适当地填充或为空,代码仍然出错。任何见解都有帮助。此外,我更希望日期格式是MM/DD/YYYY,但我不完全确定如何覆盖djangos默认%Y%m%d
1条答案
按热度按时间xwbd5t1u1#
问题可能来自您的CSV文件,其中包含“符号”。这被称为右双引号(https://symbl.cc/en/201D/)。解析器将难以理解这一点。
您可以使用
strptime
来理解此格式,如下所示:您将获得日期,或在您的情况下:
或
以获得字符串。