我想建立一个系统,用户上传的文件将根据用户名和文件名得到一个路径。对this question的回答似乎指向了正确的方向,但从视图上看,我在执行方面遇到了一些麻烦。如何将文件上传到自定义文件路径
我有一个使用这个模型:
class Document(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100, blank=False, null=False)
date = models.DateTimeField(auto_now=True)
path = models.FileField(upload_to= custom_doc_file_path) # path should be /media/users/USERNAME/DOCUMENT_NAME
和custom_doc_file_path的定义,像这样:
def custom_doc_file_path(instance, filename):
# creates media/users/USERNAME/FILENAME
return '/'.join(['users', instance.user.username, get_directory_name(filename), filename])
def get_directory_name(filename):
directory = filename.replace('.', '_')
directory = directory.replace(' ', '_')
return directory
上传从管理视图中的文件时,这个伟大的工程,但我不能似乎从我创建的视图中复制它。我的看法是这样的:
def create_button(request):
if request.method == 'POST':
document = Document.objects.create(
user = request.user,
name = request.POST['name'],
path = request.POST['uploaded_file']
)
document.save()
但是,当我尝试这个路径被保存为文件的名称。如果我尝试将路径留空,然后将文件保存到该路径,模型根本不会创建路径。此外,我会认为该文件应该在request.FILES
,但这是显示为一个空字典。
本质上我只是想知道当我通过这个模型添加一个新文档时,我需要做什么来复制管理员的行为。
没有使用任何形式的?如果你使用'document = Document.objects.create(...)',你不需要'document.save()'https://docs.djangoproject.com/en/dev/topics/db/queries/#创造对象 – 2011-12-23 23:28:06