2014-09-03 6 views
5

Użytkownik przesyła plik o konkretnym pytaniu w postaci .c. Chcę plik zostać zmieniona na 'userid_questionid.c'Przesyłanie i zmiana nazwy pliku Django

Moja models.py jest:

from django.db import models 

class users(models.Model): 
    username = models.CharField(max_length=20) 
    password = models.CharField(max_length=20) 
    score=models.IntegerField(max_length=3) 
    def __unicode__(self): 
     return self.username 

class questions(models.Model): 
    question = models.TextField(max_length=2000) 
    qid=models.IntegerField(max_length=2) 
    def __unicode__(self): 
     return self.qid 

def content_file_name(instance, filename): 
    return '/'.join(['uploads', instance.questid.qid, filename]) 


class submission(models.Model): 
    user = models.ForeignKey(users) 
    questid = models.ForeignKey(questions) 
    file = models.FileField(upload_to=content_file_name) 

próbowałem tego. Ale po prostu tworzy folder użytkownika i zapisuje w nim plik. Proszę pomóż. Dziękuję Ci. Potrzebuję zmienić nazwę pliku.

+0

Separator nie zawsze jest "/". W zależności od systemu operacyjnego można również użyć '.','> ',': 'i odwróconych ukośników. – sgarza62

Odpowiedz

7

Trzeba tylko zmienić swoją funkcję content_file_name. Poniższa funkcja utworzy ścieżki takie jak: uploads/42_100.c, gdzie 42 jest identyfikatorem użytkownika, a 100 jest identyfikatorem pytania.

import os 
def content_file_name(instance, filename): 
    ext = filename.split('.')[-1] 
    filename = "%s_%s.%s" % (instance.user.id, instance.questid.id, ext) 
    return os.path.join('uploads', filename) 
+0

Zadziałało! Musiałem również dokonać modyfikacji w views.py i powiązanym z nim szablonie django. Dzięki. –

+0

@JaineshPatel Cieszę się, że to słyszę! Proszę oznaczyć odpowiedź jako poprawną, jeśli pytanie zostanie rozwiązane. – sgarza62

+0

Teraz potrzebuję pliku w formacie "submissionid_userid_questionid.c"! Próbowałem użyć "instance.code.id", ale nie działa. Próbowałem również "instance.id", ale również nie działa. Proszę, zaopiekuj się nim. –