【发布时间】:2014-02-28 23:44:26
【问题描述】:
我是 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)
也不行。
【问题讨论】:
-
你试过
getattr吗?getattr(new_image, 'variable').save(...) -
哇,谢谢,它是这样工作的。你能解释一下它为什么起作用吗?在 python 文档中,它说 getattr 只返回一个值。它是 django 特有的吗?
-
@horbor,不,那是 python。您检索了一个名为“变量”的属性的值。 foo.bar = '你好'; getattr(foo, 'bar');
-
@Yuji'Tomita'Tomita 属性没有价值,所以我认为它不会返回不存在的东西。还是没搞清楚。
-
这是因为 FileField 的魔法。
img_big是一种句柄,允许您获取/设置此值。当你看到它是空的,但它允许你设置它。阅读有关 python 描述符的信息 :)。
标签: python django django-forms filefield setattr