【发布时间】:2012-03-15 12:07:40
【问题描述】:
我正在尝试使用以下代码(在 models.py 中)为上传的图片提供更好的路径:
def get_image_path_photos(instance, filename):
return os.path.join('photos', str(instance.someproperty), filename)
和模型
class Photo(models.Model):
someproperty = models.CharField(max_length=17, blank=False, null=False, default="something")
photo = models.ImageField(upload_to=get_image_path_photos, blank=True, null=True)
当我在新插入后保存它时,它将它保存在路径 /photos/something/ 中(它继续使用默认值)。 当我编辑它,添加照片并保存时,它会将其保存到正确的路径。 所以它必须在保存新对象的同时做一些事情,它还不存在。
我对 instance.id 进行了同样的尝试,这也一直是 None (我在 id 上使用自动增量读取解决了这个问题,但这听起来也使用默认值,并且使用默认 pk/id 是 auto增量)。
我发现了一些类似的问题,但没有一个可以解决我的问题。
我想使用 pre_save 信号....但不知何故,我的直觉告诉我这不是正确的方法。
我自己发现的问题的解决方法,请看我的回答...很好的一课,不要使用与字段名相同的slugname定义.....
【问题讨论】:
-
我刚试过你的代码,它把照片保存到“photos/something/avatar_big.png”。您的问题不在您发布的代码中。
-
问题是,当您使用默认值以外的其他值时,例如 someproperty=somethingeElse,它会一直将其保存到某个东西而不是 somethingElse
-
我只是尝试将值更改为'bar',它保存图像到:'photos/bar/avatar_big.png'
-
是的,谢谢你的努力,我刚刚发现了一些别的东西,它与 slugname 与文件名相同有关。无论如何,我投票给你,为你的努力!谢谢。