Есть ли способ избежать django, чтобы загрузить тот же файл имени снова, изменив его имя - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь разработать простую модель Django для загрузки файлов PDF. Форма основана на модели. Каждый раз, когда пользователь загружает файл, создается запись в таблице базы данных с указанием пути к файлу (включая имя файла), загруженного имени пользователя и времени и т. Д.

когда я снова загружаю тот же файл, Django загружает тот же файл, изменяя его имя (poster-offer.pdf -> poster-offer_IomFZQM.pdf). Это также создает другую запись в таблице базы данных.

Я хочу, чтобы Django предупреждал пользователя, когда он пытается загрузить уже существующий файл, говоря, что (файл с таким именем уже существует) или что-то в этом роде, а не загружать дубликат файла.

Я подписался на этот пост, пост 1 , но он говорит, что не мешает Django загрузить файл.

Я следовал этому методу post 2 , но я новичок в Django, и это кажется сложным. Я считаю, что для более новых версий Django должен быть более простой способ решения этой проблемы.

Я добавил уникальный = True для FileField. Не работает

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 голосов
/ 30 апреля 2019

Самый простой способ - найти имя и загрузить файл:

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