Как сохранить django FileField в папку пользователя? - PullRequest
3 голосов
/ 13 мая 2009

У меня есть такая модель

<code>
def upload_location(instance, filename):
    return 'validate/%s/builds/%s' % (get_current_user(), filename) 

class MidletPair(models.Model):
    jad_file = models.FileField(upload_to = upload_location)
    jar_file = models.FileField(upload_to = upload_location)
    upload_to=tempfile.gettempdir()

Как я могу получить текущего пользователя в upload_location () ...?

Примечание: поиск в материалах django вводит в заблуждение, так как в сети очень много вещей до версии 1.0.

Ответы [ 3 ]

8 голосов
/ 13 мая 2009

Текущий пользователь хранится в объекте запроса, и вы не можете получить это в методе модели, пока не передадите его из другого места - что вы не можете сделать в функции upload_to.

Так что вам нужно подходить к этому по-другому - я бы предложил сделать это на уровне формы. Вы можете передать объект запроса в метод __init__ формы и сохранить его в атрибуте экземпляра, где вы можете получить его в пользовательском обработчике загрузки. Для получения документации по загрузчикам, смотрите здесь .

5 голосов
/ 11 марта 2010

Если вы добавили пользовательское поле в модель, и этот атрибут был установлен до того, как вы выполнили выгрузку, то вы можете включить пользователя в функцию upload_location через атрибут instance.

4 голосов
/ 13 мая 2009

Во-первых, не ищите в сети справку Django. Искать только здесь: http://docs.djangoproject.com/en/dev/

Во-вторых, текущий пользователь является частью Аутентификации.

http://docs.djangoproject.com/en/dev/topics/auth/#topics-auth

Пользователь записывается в запросе. request.user

...