【问题标题】:Is there a way to avoid django to upload same name file again by altering its name有没有办法通过更改名称来避免 django 再次上传同名文件
【发布时间】: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


【解决方案1】:

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

# 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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2018-12-03
    • 2019-05-20
    • 2020-07-22
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多