Как мне ссылаться на другой объект в моделях Django - PullRequest
0 голосов
/ 12 января 2011

первый пост здесь. В Django я хочу, чтобы с определенной моделью было связано много файлов, поэтому я делаю отдельную модель, называемую файлами, и у модели 'A' есть много файлов. Но я хочу, чтобы мои файлы были сохранены в директории, названной моделью 'A'. Так, например, я хочу что-то вроде этого:

class Show(models.Model):
     name = models.CharField()
     showfolder = models.FilePathField()

class Episode(models.Model):
     show = models.ForeignKey(Show)
     name = models.CharField()
     files = models.ManyToManyField(mp3)

class Mp3(models.Model):
     file = FileField(upload_to=Episode.show.showfolder)

Так что, надеюсь, последняя строка выражает то, что я ХОЧУ, чтобы сделать (получить имя папки из Показать объект, связанный с эпизодом). Вопрос в том, как мне это написать? (Кроме прыжков через обручи в контроллере.)

Спасибо.

1 Ответ

1 голос
/ 12 января 2011

В вашей текущей модели из-за связи Episode ManyToMany с Mp3 один файл может быть связан с одним или несколькими эпизодами. Это будет означать, что ваш файл должен одновременно существовать в нескольких местах.

Чтобы иметь иерархическую структуру, вам нужен ForeignKey to Episode в модели Mp3:

class Mp3(Model):
     episode = ForeignKey(Episode)

Теперь о вашем имени файла. Согласно документации django , атрибут upload_to может принимать вызываемое и передает ему два аргумента: instance и filename.

def get_file_name(instance, original_filename):
    return os.path.join(MEDIA_ROOT, 'mp3', instance.episode.show.showfolder,     
                        original_filename)

class Mp3(Model):
     file = FileField(upload_to=get_file_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...