1. mas

    25.07.2010

    0 ↑
    0 ↓
    Нужно создать модель с динамическим FilePathField, параметр path которого будет разным для каждого инстанса модели.
    class Project(models.Model):
    dir_name = models.CharField()
    main_file = models.FilePathField(path = "/home/projs/%s/" % self.dir_name)

    Этот пример конечно же не работает :-) Возможно ли сделать так чтобы при апдейте объекта (в админке) менялся параметр path в зависимости от dir_name? Может есть какой-то хук на стадии "получения" объекта?

    Спасибо.
  2. sealion

    25.07.2010

    0 ↑
    0 ↓
    Перегрузить метод save:
    def save(self):
    self.main_file = "/home/projs/%s/" % self.dir_name
    super(Project, self).save()
  3. Если в upload_to передать callable, то в этот callable прекрасным образом приедет instance модели.

  4. mas

    25.07.2010

    0 ↑
    0 ↓
    Нужно чтобы это происходило на стадии получения существующего объекта, а не после сохранения.
    models.FilePathField(path = "/home/projs/%s/" % self.dir_name)
    У каждого проекта есть своя папка, и в этой папке для каждого проекта нужно выбрать один (главный) файл. Поле FilePathField позволяет выбрать файл на сервере из какой-то захардкоженой папки, но я бы хотел ограничивать выбор файла - динамически - только той папкой, название которой совпадает с аттрибутом dir_name.

    То есть, если proj1.dir_name равняется 'vasya', а proj2.dir_name - 'petya', то параметр path будет у proj1 - "/home/projs/vasya/", а у proj2 - "/home/projs/petya/".
  5. Упс, с FileField попутал. Тогда, наверное, только js-ом (как для любой другой динамики) фильтровать список на клиенте и дописать в форме clean, чтобы он не пускал "неправильные" файлы.

  6. mas

    26.07.2010

    0 ↑
    0 ↓
    Действительно, по другому никак. Спасибо, Аркадий.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.