【问题标题】:Django File-Transfers Save to New File for Each UserDjango File-Transfers 为每个用户保存到新文件
【发布时间】:2012-02-26 12:24:12
【问题描述】:

我正在尝试使用 Django-filetransfer 上传文件,我想知道如何导入用户名以用作保存上传文件的名称。现在我正在使用 User.username,但那是无效的。我想最大的问题是如何从models.py 访问用户的属性。下面是我的models.py:

from django.db import models
from django.contrib.auth.models import User, UserManager

class UploadModel(User,models.Model):
    title = models.CharField(max_length=64, blank=True)
    user = models.ForeignKey(User)
    file = models.FileField(upload_to='./uploads/'+str(User.username))


    @property
    def filename(self):
    return self.file.name.rsplit('/', 1)[-1]

更新: 应用/上传/models.py

from django.db import models
from django.contrib.auth.models import User, UserManager

def uploadmodel_file_upload_to(instance, filename):
    return 'uploads/%s/%s' % (instance.user.username, filename)

class UploadModel(models.Model):
    user = models.ForeignKey('auth.user')
    file = models.FileField(upload_to=uploadmodel_file_upload_to)

/upload 处的模板语法错误 渲染时捕获 DatabaseError:列 upload_uploadmodel.user_id 不存在 第 1 行:选择 "upload_uploadmodel"."id", "upload_uploadmodel"."user...

【问题讨论】:

  • 为什么 UploadModel 继承自 User ?

标签: python django


【解决方案1】:

模型属性在 Python 解析 models.py 代码时正式定义。您应该upload_to使用回调,以使用用户相关实例生成上传文件路径,例如:

def uploadmodel_file_upload_to(instance, filename):
    return 'uploads/%s/%s' % (instance.user.username, filename)

class UploadModel(models.Model):
    user = models.ForeignKey('auth.user')
    file = models.FileField(upload_to=uploadmodel_file_upload_to)

【讨论】:

  • 我将该代码放入 models.py 并在控制台中得到“NameError: name 'uploadmodel_file_upload_to' is not defined”。
  • 您没有正确粘贴(我测试了这段代码)。请发布您更新的 models.py 和回溯。可能,您没有在引用它的 FileField 定义之前粘贴 uploadmodel_file_upload_to 定义。因此,NameError。
  • 已编辑。谢谢你的帮助。抱歉,如果我遗漏了一些明显的东西。
  • 对,所以要么删除 UploadModel 表并再次运行 syncdb,要么放回旧代码并 0)将 uploadmodel_file_upload_to 的定义粘贴到代码中之前 UploadModel 类和 1 ) 将 FileField 的 upload_to 值更改为 uploadmodel_file_upload_to。 (我问为什么你的模型继承自 User [不是很好],但你没有回答)在我的代码中,我修复了你的模型,它没有任何意义,也没有在 Django 1.3.1 中验证。
  • 好的,它正在运行,但它让我可以从网站上的每个用户中进行选择。有没有办法让它自动保存到标有登录用户的用户名的文件夹中?
猜你喜欢
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 2010-10-25
  • 2021-05-01
相关资源
最近更新 更多