Django models.FileField - съхранява само името на файла, без пътеки или препратки към папки

Използвам администраторския сайт на Django, за да управлявам някои данни - но не и да създавам уеб приложение. Трябва ми полето за качване на файл, за да съхранява само името на файла в базата данни.

В момента мога да получа абсолютни пътища като: /Users/me/uploads/file.png

Или с помощта на параметъра upload_to вземете нещо подобно в базата данни: uploads/file.png

Как мога да го накарам да бъде това: file.png

РЕДАКТИРАНЕ:

Взимам базата данни на sqlite и използвам в друг клиент - така че наличието на пътеки в db записа няма смисъл в моя случай.

Благодаря!


person gngrwzrd    schedule 04.04.2013    source източник


Отговори (2)


Аргументът upload_to на FileField може да бъде извикан. вижте документите

Ако наистина трябва да съхраните само името на файла, мисля, че можете да направите нещо подобно. Самият аз не съм опитвал, но мисля, че работи.

def only_filename(instance, filename):
    return filename

class MyModel(models.Model):
    file = models.FileField(upload_to=only_filename)
person luc    schedule 05.04.2013

Бих запазил FileField и бих използвал python os.path.basename за извлечете името на файла.

Това може да бъде капсулирано със свойство

class MyModel(models.Model):
   file = models.FileField(...)

   @property
   def filename(self):
       return os.path.basename(self.file.name)
person luc    schedule 04.04.2013
comment
os.path.basename е това, което търсите, но отговорът на luc тук наистина го капсулира по много django/pythonesque начин. - person GordonsBeard; 04.04.2013
comment
Това всъщност няма да помогне - ние използваме базата данни sqllite в друг клиент, така че бих искал всички пътеки да бъдат премахнати напълно. - person gngrwzrd; 05.04.2013
comment
Мисля, че е по-ясно да публикувате редакцията в друг отговор - person luc; 05.04.2013