#python #django #django-models
Вопрос:
Я хочу получить доступ к имени файла, загруженного models.FileField()
в мой класс.
Вот мой класс
class extract(models.Model):
doc = models.FileField(upload_to='files/')
Существует ли функция или какой-либо метод для доступа к исходному имени загруженного файла без изменения имени во время загрузки.
например, что-то вроде этого
name = doc.filename()
Правка — 2:
Я очень новичок в джанго и программировании в целом. Так что это может показаться глупым, но я хочу что-то вроде этого:
class extract(models.Model):
def get_name(instance,filename):
path = 'files'
name = filename
return name,path
doc = models.FileField(fname,upload_to==get_name)
def ex(fname):
path0 = "E:/Projects/PDF Converter/pdf/files/"
fullpath = path0 fname
document = open(fullpath)
reader = PyPDF2.PdfFileReader(document)
page1 = reader.getPage(0)
data = page1.extractText()
return data
text = models.TextField(default=ex(fname),editable=False)
Комментарии:
1. Это совсем не то, как вы используете
default=
. Кроме того, у вас есть опечатка в вашемupload_to
…
Ответ №1:
Согласно документации, это может быть достигнуто путем передачи функции обратного вызова в качестве upload_to
аргумента, и функция обратного вызова будет вызвана с заданным именем файла в качестве второго аргумента:
def get_filename(_, filename):
print(filename) # or do whatever you want with the original filename here
return 'files/'
class extract(models.Model):
doc = models.FileField(upload_to=get_filename)
Комментарии:
1. Я отредактировал свой вопрос, не могли бы вы, пожалуйста, попытаться помочь мне с этим
2. Не уверен, чего вы хотите от своего недавно опубликованного кода. Если вы хотите, чтобы текстовое поле было предварительно заполнено именем файла, это невозможно, так как аргумент по умолчанию задается при определении класса, а не при загрузке файла пользователем.
3. Хорошо, что я хочу, это переменная, которая содержит имя загруженного файла для каждого объекта извлечения класса