如何将django图像重命名为id.jpg

时间:2016-02-19 08:21:34

标签: python django

我在django的模型就像这样

meal_img_url=models.CharField(max_length=300,default=NULL)
meal_image=models.FileField(upload_to='mealsOne/static/meal_photos');
package_cost = models.FloatField(default=0)

def __unicode__(self):
    os.system("mv "+str(self.meal_image.name)+" mealsOne/static/meal_photos/web/"+str(self.id)+".jpg")
    self.meal_image.name='static/meal_photos/web/'+str(self.id)+".jpg"
    self.meal_img_url='http://instomeal.com/'+self.meal_image.name
    self.save()

但每次移动操作都需要花费太多时间。那么有没有其他方法来保存带有id的文件(例如:id.jpg)?

2 个答案:

答案 0 :(得分:1)

您将函数传递给#!/usr/bin/perl use strict; use warnings; use Module::Load; my $pkg = 'plugins::Blank'; Module::Load::load($pkg); $pkg->hw(); 。在那里,您可以设置图像的文件名和路径(https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField.upload_to)。 该功能可能如下所示

upload_to

在你的模型中传递这个功能

def get_image_name(instance, filename):
    fn = 'mealsOne/static/meal_photos/%s.jpg' % instance.id
    return fn

UPDATE:

如果尚未创建对象,则不会设置meal_image=models.FileField(upload_to=get_image_name); 。然后,您可以覆盖模型的id方法并进行重命名。

save

您也可以使用djangos def save(self): super(Model, self).save(*args, **kwargs) # now the id is set # rename your image with os.rename .... 信号(https://docs.djangoproject.com/en/1.9/ref/signals/#post-save)来执行此操作

答案 1 :(得分:-1)

一些注意事项:

  • 请勿使用“+”加入网址,请使用urlparse.urljoin
  • 对于文件系统路径使用os.path.join
  • 为什么会在 unicode 函数中使用“mv”和“self.save”,它应该用于“渲染”对象?