【问题标题】:Django File Upload and RenameDjango 文件上传和重命名
【发布时间】:2014-10-28 10:55:34
【问题描述】:

用户正在上传特定问题的 .c 文件。我希望将文件重命名为“userid_questionid.c”

我的 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)

我试过这个。但它只是创建用户文件夹并将文件保存在其中。请帮忙。谢谢。我需要重命名文件。

【问题讨论】:

标签: python django foreign-keys


【解决方案1】:

您只需要更改您的content_file_name 函数。下面的函数将创建如下路径:uploads/42_100.c,其中42 是用户的 id,100 是问题的 id。

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)

【讨论】:

  • 成功了!我还必须在 views.py 和与之关联的 django 模板中进行修改。谢谢。
  • @JaineshPatel 很高兴听到这个消息!如果问题得到解决,请将答案标记为正确
  • 现在我需要格式为“submissionid_userid_questionid.c”的文件!我尝试使用“instance.code.id”,但它不起作用。我也尝试过“instance.id”,但它也不起作用。请照顾好它。
  • @JaineshPatel 您从您的submission 模型的file 字段调用upload_to = content_fine_name,对吗?那么你应该将我的解决方案的行更改为:filename = "%s_%s_%s.%s" % (instance.id, instance.user.id, instance.questid.id, ext)
  • @JaineshPatel 如果这不起作用,请打开一个带有完整报告(包括错误)的问题,并在 cmets 中链接到它,以便我可以看到它。
猜你喜欢
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2013-04-29
  • 1970-01-01
相关资源
最近更新 更多