我希望能够通过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
方法应该这样做。但我不知道该怎么做。
我认为在我上传之前我需要先创建一个专辑,然后才能确定图像会进入哪个专辑。此时有点丢失。不确定我的Image
或Album
课程是否完整。谢谢你的帮助!!
答案 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。