有没有办法通过改变名称来避免django再次上传同名文件

问题描述 投票:-1回答:1

我正在尝试通过Django开发一个简单的模型表单来上传pdf文件。表单基于模型。每次用户上传文件时,将使用文件路径(包括文件名),上传的用户名和时间等创建数据库表条目。

当我再次上传相同的文件时,Django通过更改其名称来上传相同的文件(poster-proposal.pdf - > poster-proposal_IomFZQM.pdf)。它还在数据库表中创建另一个条目。

我希望Django在尝试上传已存在的文件(已存在同名文件)或类似内容而不上传重复文件时向用户发出警告。

我按照这篇文章,post 1,但它说它不会阻止Django上传文件。

我遵循这个方法post 2,但我是Django的新手,看起来很复杂。我相信对于较新的Django版本,应该有一种更简单的方法来解决这个问题。

我在FileField中添加了unique = True。它没有用

models.朋友

class files(models.Model):
    repo_id = models.ForeignKey(Repository, on_delete = models.CASCADE)
    username = models.CharField(db_column='username',max_length = 45)
    date = models.DateTimeField(auto_now_add=True, db_column = 'date')
    file = models.FileField(upload_to='documents/', db_column = 'file', unique = True)
    indicator_name =models.CharField(db_column = 'indicator_name',max_length = 100)
    username = models.CharField(db_column='username',max_length = 45)

任何想法都将受到高度赞赏。谢谢

django file django-models upload duplicates
1个回答
0
投票

最简单的方法是搜索名称,然后上传文件:

# Note that file name depends on your upload_to path.
# Either you should include it in the search or you have to use something like:
# filter(file_contains="filename") which might return results that you don't want
filename = "documents/" + filename_you_want_to_upload
files = files.objects.filter(file=filename)

if files.count() > 0:
    # A file with that name exists.
    # Return some error or ...
else:
    # There is no file with that name.
    # Upload the file and save it to database.
© www.soinside.com 2019 - 2024. All rights reserved.