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())
添加回答
舉報