通过Django中的管理员上传图片

时间:2014-05-09 22:05:13

标签: python django django-models django-admin

我希望能够通过Django中的管理员上传图片。但我遇到了一些困难

项目结构:

/Proj
   /Proj

   /static
      /img
         /albums
            /album1
               img1
            /album2
               img2

专辑类:

class Album(models.Model):
    title = models.CharField(max_length = 60)

    def __unicode__(self):
        return self.title

图片类:

class Image(models.Model):
    title = models.CharField(max_length = 60, blank = True, null = True)
    image = models.FileField(upload_to = get_upload_file_name)  <-- !!!!
    tags = models.ManyToManyField(Tag, blank = True)
    albums = models.ForeignKey(Album)
    width = models.IntegerField(blank = True, null = True)
    height = models.IntegerField(blank = True, null = True)
    created = models.DateTimeField(auto_now_add=True)

我认为我的image = models.FileField(upload_to = get_upload_file_name)使用get_upload_file_name方法将图片放入正确的相册中。这是通过附加到我的MEDIA_ROOT MEDIA_ROOT = os.path.join(BASE_DIR, 'static')

来完成的

所以get_upload_file_name方法应该这样做。但我不知道该怎么做。

我认为在我上传之前我需要先创建一个专辑,然后才能确定图像会进入哪个专辑。此时有点丢失。不确定我的ImageAlbum课程是否完整。谢谢你的帮助!!

1 个答案:

答案 0 :(得分:1)

您传递到upload_to的功能必须采用以下格式:

def get_upload_file_name(instance, filename):
    new_file_path_and_name = os.path.join(BASE_DIR, 'static', 'test.txt')
    return new_file_path_and_name

instance是您即将保存的Image模型的实例。这意味着它可以访问已填充的所有其他字段。 filename是上传文件的原始名称。您可以选择使用filename或只返回您选择的其他路径+名称。

官方文档为here