如何检测到用户提供上传的文件的名称(通过使用django.forms.ModelForm
字段的FileField
)与存在,因此决定在表单上验证失败?
我发现这一点特别具有挑战性,因为从表单中我不知道如何找出upload_to
对FileField
的价值是什么,所以我不能在文件系统中查看自己是否已存在该文件。
答案 0 :(得分:1)
我认为你有两个选择:
在settings.py中设置一个值,以保存您的'upload_to'然后用它来检查你的验证时间。 这样的验证会起作用(你需要改变你的upload_to ofc):
from django.conf import settings
if settings.UPLOAD_TO:
# Do something
问题在于你不能拥有子文件夹或任何复杂的文件。
如您的评论中所述,第二个选项是在模型中添加一个新列,其中包含文件的哈希值。这种方法应该更好。正如您在评论中提到的那样,为了避免上传大文件,检查,失败,上传其他大文件等,您可以尝试在客户端中对其进行哈希并首先通过ajax进行验证(您将在服务器中再次验证它,但这可以让你的用户更快地完成任务。)
答案 1 :(得分:1)
较早的问题,但Django 1.11现在支持FileField上的unique
选项。在模型的字段声明中设置unique=True
。
将upload_to设置为什么并不重要。文件名仍将存储在数据库中。
在Django 1.11中更改: 在旧版本中,不能在FileField上使用unique = True。
https://docs.djangoproject.com/en/1.11/ref/models/fields/#unique