我想从csv填充我的django模型。我用numpy上传csv然后,因为我的模型字段被调用像csv的列标题,我想做这样的事情:
data=np.genfromtxt("file.csv", delimiter=',', dtype=None, names=True)
columns = data.dtype.names
for i in range(len(data['id'])):
for a in range(1, len(columns)): #1
p=MyModel.objects.filter(columns[a]=data[i][columns[a]])
p.save()
现在,这完全是行,并且它不起作用,因为我无法通过那些列[a]而不是字段名称。
我甚至试过MyModel._meta_fields[a]=data[i][a].
我有几十个甚至几百个字段,有时候:是不是有一个优雅的解决方案,我可以编写一长串字段名称?
谢谢!
答案 0 :(得分:1)
您可以考虑构建要传递的参数的字典,然后使用**
将字典作为参数提供给函数。
column_args_dict = {columns[a]: data[i][columns[a]]}
p = MyModel.objects.filter(**column_args_dict)
答案 1 :(得分:0)
如果您尝试从数据的每一行创建模型的新实例,请使用setattr
函数设置值:
data=np.genfromtxt("file.csv", delimiter=',', dtype=None, names=True)
columns = data.dtype.names
for i in range(len(data['id'])):
p = MyModel()
for a in range(1, len(columns)): #1
if hasattr(p, columns[a]):
setattr(p, columns[a], data[i][columns[a]])
else:
raise AttributeError("'MyModel' object has no attribute '{0}'".format(columns[a]))
p.save()