2017-01-02 58 views
0

instance.id返回None上传图片时通过管理页面。这个想法是将每个住所的所有图像上传到不同的文件夹。这里是我的代码:django instance.id =上传图片时无

models.py

from django.db import models 
import os 

def get_image_path(instance, filename): 
    return os.path.join('photos', "residence_%s" % instance.id, filename) 


# Create your models here. 
class Residence(models.Model): 
    big_image = models.ImageField("Main Image",upload_to=get_image_path) 
    small_images = models.ImageField("Small Images",upload_to=get_image_path, blank=True, null=True) 

settings.py

MEDIA_URL = '/media/' 

编辑:如果我修改图像已被加入模型后,它的工作原理。

+0

用,因为实例尚未保存instance.pk –

+0

还是返回无 –

+0

这是没有尝试在那时候。 –

回答

-1

另一种不错的方式来解决这个问题,需要更少的代码是有您的模型使用主键的UUID而不是数据库生成的ID。这意味着模型在第一次保存时已经是已知的UUID,并且可以与任何upload_to回调一起使用。

所以对于原来的例子,你会做这样的事情

from django.db import models 

import uuid 
import os 

def get_image_path(instance, filename): 
    return os.path.join('photos', "residence_%s" % str(instance.id), filename) 

# Create your models here. 
class Residence(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    big_image = models.ImageField("Main Image",upload_to=get_image_path) 
    small_images = models.ImageField("Small Images",upload_to=get_image_path, blank=True, null=True) 

Django's UUIDField reference更多信息