我正在尝试由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)
任何想法都会受到高度赞赏。谢谢
答案 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.