Python Django get_或_create在导入CSV时返回models.DoesNotExist

Python Django get_或_create在导入CSV时返回models.DoesNotExist,python,django,csv,Python,Django,Csv,我花了很长时间才弄明白这一点。我只是尝试使用Python的CSV模块和Django的get_或_create导入CSV文件 这是我基于代码构建的简单代码: 在shell上运行import_数据时,出现以下错误 peoplelisting.models.DoesNotExist: Person matching query does not exist. 是的,这个特定的人并不存在,但这不是使用get\u或create的全部意义吗?如果它不存在,就创建它?经过多次尝试,最终发现问题如下: 我的c

我花了很长时间才弄明白这一点。我只是尝试使用Python的CSV模块和Django的get_或_create导入CSV文件

这是我基于代码构建的简单代码:

在shell上运行import_数据时,出现以下错误

peoplelisting.models.DoesNotExist: Person matching query does not exist.

是的,这个特定的人并不存在,但这不是使用get\u或create的全部意义吗?如果它不存在,就创建它?

经过多次尝试,最终发现问题如下:

我的csv还包含一个我没有忽略的标题行。我原以为我会继续一顿饭,只有在我得到csv导入工作后才会忽略标题,但标题本身造成了问题,这要感谢帖子间接地帮助了很多。标头中的值与架构max_length等不匹配,这就是匹配查询不存在的人员所指的内容。忽略标题使其工作。不过,我只希望错误消息更具描述性。希望它能帮助其他人节省我花在调试一件简单事情上的时间。以下是正确的代码:

import csv
from .models import Person

def import_data():
    with open('/path/to/csv/people_list.csv') as f:
           reader = csv.reader(f)
           for row in reader:
              if row[0] != 'Person_name': #where Person_name is first column's name
                 _, created = Org.objects.get_or_create(
                     name=row[0],
                     p_id=row[1],
                     current_status=row[2],
                     )

不必每次都检查第[0]行,只需跳过第一行即可:

next(reader, None)  # skip the headers
资料来源:

next(reader, None)  # skip the headers