如何在Django中动态更新模型?

时间:2014-03-26 18:48:28

标签: python django csv numpy django-models

我想从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].

之类的东西

我有几十个甚至几百个字段,有时候:是不是有一个优雅的解决方案,我可以编写一长串字段名称?

谢谢!

2 个答案:

答案 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()