2014-09-03 16 views
5

Der Benutzer lädt eine .c Datei einer bestimmten Frage. Ich möchte, dass die Datei als 'userid_questionid.c' umbenannt werdenDjango Datei hochladen und umbenennen

Mein models.py ist:

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) 

ich dies versucht. Aber es erstellt nur den Ordner des Benutzers und speichert die Datei darin. Bitte helfen Sie. Danke. Ich brauche die Datei umbenannt werden.

+0

Das Trennzeichen ist nicht immer '/'. Je nach Betriebssystem können auch '.',' '' '' '' 'und Backslashes verwendet werden. – sgarza62

Antwort

7

Sie müssen nur Ihre content_file_name Funktion ändern. Die folgende Funktion erstellt Pfade wie folgt: uploads/42_100.c, wobei 42 die ID des Benutzers und 100 die ID der Frage ist.

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

Es hat funktioniert! Außerdem musste ich Änderungen in views.py und der damit verbundenen Django-Vorlage vornehmen. Danke. –

+0

@JaineshPatel Freut mich, es zu hören! Bitte markieren Sie die Antwort als korrekt, wenn die Frage gelöst ist – sgarza62

+0

Jetzt brauche ich die Datei im Format "submissionid_userid_questionid.c"! Ich habe versucht mit "instance.code.id", aber es funktioniert nicht. Ich habe auch "instance.id" versucht, aber es funktioniert auch nicht. Bitte kümmere dich darum. –