2013-07-09 16 views
10

Używam modelu z FileField do obsługi przesyłania plików. Teraz pliki mogą być ładowane pomyślnie. Jest jednak jeszcze jedno małe usprawnienie, które chcę wprowadzić, czyli utworzyć folder dla użytkownika z nazwą użytkownika.Model Django z FileField - dynamiczny argument "upload_to"

Oto kod próbowałem

class UserFiles(models.Model): 
    user = models.OneToOneField(User) 
    file = models.FileField(upload_to='files/users/user.username/%Y_%m_%d/') 

Dałoby to folder „user.username” zamiast „John” (jeden przykład z nazwą użytkownika)

Próbowałem również inne sposoby takie jak files/users/%user.username/%Y_%m_%d/ , ale nie dałoby to folderu z nazwą użytkownika. Nie wiesz, jak powinna wyglądać składnia lub czy jest to możliwe.

Czy możesz podać kilka sugestii na ten temat? Dziękuję bardzo za pomoc i wyjaśnienia.

+0

http://stackoverflow.com/questions/1190697/django-filefield-with-upload-to-determined-at-runtime?rq=1 rozwiązanie znalezione w tym łączu – Mona

Odpowiedz

20

Zamiast napisu spróbować przekazując funkcję:

def generate_filename(self, filename): 
    url = "files/users/%s/%s" % (self.user.username, filename) 
    return url 

class UserFiles(models.Model): 
    user = models.OneToOneField(User) 
    file = models.FileField(upload_to=generate_filename) 
+0

Witam, dziękuję bardzo za odpowiedź, pierwsze rozwiązanie działa dobrze. Druga, nazwa użytkownika obiektu użytkownika, tj. user.username nie może zostać rozpoznany. – Mona

+0

spróbuj zmienić 'str (user.username)' dla 'str (user)', Nie ma za co! : D –

+0

, które dałoby jako nazwę folderu – Mona