【发布时间】:2023-04-07 06:32:01
【问题描述】:
我正在尝试建立一个系统,在该系统中,用户上传的文件将根据用户名和文件名获得路径。 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()docs.djangoproject.com/en/dev/topics/db/queries/…
标签: python django file-upload