2014-09-03 2 views
5

Пользователь заказывает файл .c. Я хочу, чтобы файл, который будет переименован в '' userid_questionid.cЗагрузка и изменение файла Django

Мой models.py является:

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) 

Я попытался это. Но он просто создает папку пользователя и сохраняет в ней файл. Пожалуйста помоги. Спасибо. Мне нужно, чтобы файл был переименован.

+0

Разделитель не всегда '/'. В зависимости от ОС могут также использоваться '.','> ',': 'и обратные слэши. – sgarza62

ответ

7

Вам просто нужно изменить функцию content_file_name. Функция ниже создаст такие пути: uploads/42_100.c, где 42 - это идентификатор пользователя, а 100 - это идентификатор вопроса.

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

Это сработало! Также мне пришлось внести изменения в views.py и связанный с ним шаблон django. Спасибо. –

+0

@JaineshPatel Рад это слышать! Пожалуйста, отметьте ответ как правильный, если вопрос будет устранен. – sgarza62

+0

Теперь мне нужен файл в формате «submissionid_userid_questionid.c»! Я попытался использовать «instance.code.id», но не работал. Я также попробовал «instance.id», но также не работал. Пожалуйста, следите за ним. –

Смежные вопросы