1 回答
TA贡献1821条经验 获得超6个赞
经过几个小时的调试,我找到了这个ImportMixin类,它位于import_export/admin.py
该类包含一个名为的方法import_action,如下所示
def import_action(self, request, *args, **kwargs):
...
import_file = form.cleaned_data['import_file']
...
data = tmp_storage.read(input_format.get_read_mode())
...
dataset = input_format.create_dataset(data)
...
如您所见,该函数将上传的文件读取为字符串,然后将其传递给input_format.create_dataset(). 所以我所要做的就是添加一个删除空白行的自定义函数
data = self.remove_blanks(data)
dataset = input_format.create_dataset(data)
import_export/admin.py/ImportMixin
def remove_blanks(self, data):
return os.linesep.join([s for s in data.splitlines() if s.strip()])
这样,任何 csv 文件都不会有任何空行,这将强制第一行成为标题,从而解决问题。我希望这对面临同样问题的人有用。
更新:还有一种简单的方法可以通过覆盖来执行相同的create_dataset操作import_export/formats/base_formats.py
import_export/formats/base_formats.py/TablibFormat
def create_dataset(self, in_stream, **kwargs):
in_stream = os.linesep.join([s for s in in_stream.splitlines() if s.strip()])
try:
return tablib.import_set(in_stream, format=self.get_title())
except:
return tablib.import_set('', format=self.get_title())
添加回答
举报