Django Heroku应用程序的Python CSV导入无法正常工作

bvjveswy  于 2023-06-23  发布在  Go
关注(0)|答案(1)|浏览(118)

我目前在尝试将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

xwbd5t1u

xwbd5t1u1#

问题可能来自您的CSV文件,其中包含“符号”。这被称为右双引号(https://symbl.cc/en/201D/)。解析器将难以理解这一点。
您可以使用strptime来理解此格式,如下所示:

import datetime
datetime.datetime.strptime("“1995-03-28”", "“%Y-%m-%d”")

您将获得日期,或在您的情况下:

import datetime
datetime.datetime.strptime(dob, "“%Y-%m-%d”")

datetime.datetime.strptime(dob, "“%Y-%m-%d”").strftime("%Y-%m-%d")

以获得字符串。

相关问题