Django使用upload_to实例保存图像保持实例属性无

时间:2012-03-15 12:07:41

标签: django image path save

我正在尝试使用此代码(在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信号....但不知怎的,我的胆量说这不是正确的方法。

我的问题的解决方案我发现了myselve,请看我的答案......一个好的教训,不要使用与字段名称相同的slugname定义.....

1 个答案:

答案 0 :(得分:0)

对此感到抱歉。问题有点复杂。我在url中使用字段someproperty作为帖子的slug .... 我刚刚发现了一些我没想到的东西。

我使用网址中的默认值从网址发布了我的帖子(使用django rest框架)...但是我用其他内容填充了该字段。

,因为我将slugname定义为与fieldname相同,它会覆盖你在字段中填写的任何内容,其中包含来自url的值.... 这不是我想要做的事情,但是很有意义。

可能解决方法是调用slug名称与字段名称不相同......

无论如何,我仍然保留这个问题和答案,因为对我来说这是一个很难的谜题......(可能对某人有帮助)

作为jpic答案的补充: 我用django中的网址休息framwwork,让我们说; HTTP:\ someurl \ API \照片\\ 并张贴照片。

使用someproperty = bar发布照片avatar_big.png:

使用网址http \ someurl \ api \ photos \ something

将照片保存在照片中\ something \

并使用网址http:\ someurl \ api \ photos \ bar

将照片保存在照片\ bar \中

问题是(我想,仍然需要检查一下)我用于url的slug名称与fieldname相同。

这是我在views.py中使用的代码(我在django-rest-framework中使用的基于类的视图):

class PhotoBySomePropertyListOrCreateModelView(ListOrCreateModelView):
permissions = (IsAuthenticated, )
form = PhotoForm
def get_queryset(self):
    someproperty=self.kwargs['someproperty']
    return Photo.objects.filter(someproperty=someproperty)

并在urls.py中:

url(r'^api/photos/(?P<someproperty>[\w:]+)/$', PhotoBySomePropertyListOrCreateModelView.as_view(resource=PhotoResource)),

在这里你看到问题,它不会听'someproperty'中的字段,而是听url中的值....

改变它     url(r'^ api / photos /(?P [\ w:] +)/ $',PhotoBySomePropertyListOrCreateModelView.as_view(resource = PhotoResource)),

应该做的伎俩......当然也要调整视图