динамический путь к FileField - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь использовать функцию get_file_path для генерации динамического пути.Могу ли я использовать поле Album slug вместо str(instance.id) in get_file_path?спасибо

Вот модели

def get_file_path(instance, filename):
    return os.path.join('files', str(instance.id), filename)

class Album(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique = True,max_length=100,help_text="Suggested value automatically generated from name. Must be unique.")
    path = models.CharField(max_length=100,null=True, blank=True)
    language = models.ForeignKey(Category)
    albumid = models.CharField(max_length=100)

class Song(models.Model):
    title = models.CharField(max_length=100)
    artist = models.ManyToManyField(Artist)
    music = models.ForeignKey(Music)
    album = models.ForeignKey(Album)
    file = models.FileField(upload_to=get_file_path)

Обновление: я пробовал instance.slug.Это не работает.instance.slug не существует в модели песни.Он существует только в модели альбома (хотите использовать Album поле Slug) Обновление 2: вот модель снимок

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Довольно просто: str(instance.album.slug)

0 голосов
/ 30 ноября 2011

Да, просто используйте instance.slug вместо instance.id

Еще один пример вы можете найти в ответе на пост Изменить имя файла перед сохранением файла в Django

Обновление : Если не все экземпляры имеют поле слагов, вы можете быть заинтересованы в таком решении:

def get_file_path(instance, filename):
    fld = getattr(instance, 'slug', instance.id)
    return os.path.join('files', str(fld), filename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...