有没有一种方法可以避免django通过更改其名称

时间:2019-04-30 06:40:25

标签: django file django-models upload duplicates

我正在尝试由Django开发一个简单的模型表单来上传pdf文件。该表格基于模型。每次用户上载文件时,都会创建一个数据库表条目,其中包含文件路径(包括文件名),上载的用户名和时间等。

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

我希望Django在尝试上载一个已经存在的文件(例如,一个具有相同名称的文件)或类似内容而不上传重复文件时,向用户发出警告。

我关注了这篇文章post 1,但它说这并没有阻止Django上传文件。

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

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

models.py

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)

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

1 个答案:

答案 0 :(得分: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.