【发布时间】:2019-09-18 18:41:57
【问题描述】:
我正在尝试通过 Django 开发一个简单的模型表单来上传 pdf 文件。该表格基于模型。用户每次上传文件都会创建一个数据库表条目,其中包含文件路径(包括文件名)、上传的用户名和时间等。
当我再次上传相同的文件时,Django 正在通过更改其名称来上传相同的文件(poster-proposal.pdf ->poster-proposal_IomFZQM.pdf)。它还在数据库表中创建另一个条目。
我希望 Django 在用户尝试上传已经存在的文件时给他一个警告,说(同名的文件已经存在)或类似的东西,而不是上传重复的文件。
我关注了这个帖子,post 1,但它说它不会阻止 Django 上传文件。
我遵循了这个方法post 2,但我是 Django 新手,看起来很复杂。我相信对于较新的 Django 版本,应该有更简单的方法来解决这个问题。
我在 FileField 中添加了 unique = True。它不起作用
模型.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)
任何想法都将受到高度赞赏。谢谢
【问题讨论】:
-
首先,您为上传的文件使用与计算机中相同的文件名(如 poster-proposal.pdf)。这不是一个好主意。正如您所提到的,您可以再次在上传期间检查文件名,但您认为这是一个好主意吗?假设,您上传的文件名为 A.pdf,几天后您有另一个带有 A.pdf 的文件,并且您已将以前的 A.pdf 重命名为 B.pdf,那么 Django 将为新文件引发错误,因为文件名是已经在数据库中了。
-
@BidhanMajhi 了解您的担忧。但在这种情况下,这不是问题。本网站愿意供研究人员用来上传pdf文件。他们将以预定义的模式手动重命名这些文件。例如“2008_A_review_of_the_challenges_in_soil_quality_and_profitability_-Journal.pdf”。不应该有第二个同名的 pdf 文件,如果有的话,肯定应该避免重复文件。
标签: django file django-models upload duplicates