Django:使用字段名称作为字符串在FileField上调用save()

时间:2014-02-28 23:44:26

标签: python django django-forms filefield setattr

我是Django的新手,已经阅读并尝试了我想到的所有内容。

我有一个基于模型的表格。该模型包括3个FileField字段:

img_big = models.FileField(upload_to='images/%Y/%m/b',max_length=100)
img_med = models.FileField(upload_to='images/%Y/%m/m',max_length=100)   
img_sml = models.FileField(upload_to='images/%Y/%m/s',max_length=100)

在我的代码中,我想迭代这些字段并将生成的文件保存到每个字段中。 'img'是我们的文件,filename是文件名。所以,这是有效的:

new_image.img_big.save(filename, img)

但我需要一个带字段名称的变量而不是img_big,例如:

new_image.variable.save(filename, img)
or 
new_image.'test_'+filename.save(filename, img)

我尝试使用setattr(),但我不知道或不知道如何使用它设置文件名,可能在这种情况下不可能。

new_image.__dict__['fieldname'].save(filename, img)

也不起作用。

1 个答案:

答案 0 :(得分:0)

正如Paulo Bu所说,正确的解决方案很简单,使用getattr():

getattr(new_image, 'variable').save(...)

谢谢,它有效!