Python Django get_或_create在导入CSV时返回models.DoesNotExist
我花了很长时间才弄明白这一点。我只是尝试使用Python的CSV模块和Django的get_或_create导入CSV文件 这是我基于代码构建的简单代码: 在shell上运行import_数据时,出现以下错误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
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