如何在Django中动态更新模型?
我想把一个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()
但是,这样做有点粗糙,而且不管用,因为我不能用columns[a]来代替字段名。
我甚至试过像这样写:MyModel._meta_fields[a]=data[i][a].
我有几十个甚至上百个字段,有时候:难道没有一种优雅的解决方案,可以让我省去写一长串字段名的麻烦吗?
谢谢!
2 个回答
1
你可以考虑先创建一个字典,把你想传递的参数放进去,然后用 **
这个符号把字典里的内容作为参数传给函数。
column_args_dict = {columns[a]: data[i][columns[a]]}
p = MyModel.objects.filter(**column_args_dict)
3
如果你想从数据的每一行创建你模型的新实例,可以使用 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()