【问题标题】:How to save django FileField to user folder?如何将 django FileField 保存到用户文件夹?
【发布时间】:2010-10-25 21:14:54
【问题描述】:

我有一个这样的模型

def upload_location(instance, filename): return 'validate/%s/builds/%s' % (get_current_user(), filename) class MidletPair(models.Model): jad_file = models.FileField(upload_to = upload_location) jar_file = models.FileField(upload_to = upload_location) upload_to=tempfile.gettempdir()

如何在upload_location()中获取当前用户...?

旁注:查找 django 的东西令人困惑,因为网上有很多 1.0 之前的东西。

【问题讨论】:

    标签: python django django-models upload


    【解决方案1】:

    如果您在模型中添加了一个用户字段,并在执行上传之前设置了该属性,那么您可以通过实例属性让用户进入您的 upload_location 函数。

    【讨论】:

      【解决方案2】:

      当前用户存储在请求对象中,除非您从其他地方传入,否则您无法在模型方法中获取该用户 - 这是您无法在 upload_to 函数中执行的操作。

      因此,您需要以不同的方式处理此问题 - 我建议在表单级别进行。您可以将请求对象传递给表单的 __init__ 方法并将其存储在实例属性中,您可以在自定义上传处理程序中访问它。有关上传处理程序的文档,请查看 here

      【讨论】:

      • 干杯,我刚刚完成了这个工作......可能有更多关于这个的文档 - 我不得不深入研究 django 源代码(这是相当可读的),但是因为我仍然是django n00b 这有点吓人。整理好我的 djangosn-ps 帐户后,我会将其上传到那里,同时这里有一个指向我制作的自定义类的链接:pastebin.com/f114b9d29
      • 好的,这并没有完全工作(表单没有验证) - 最后我扩展了 TemporaryFileUploadHandler 以将文件复制到正确的位置(在 file_complete 中)。我仍然不确定为什么很难找到这方面的信息。
      • 我只完成了部分工作,但自定义上传处理程序在调用 .save 后将内容保存到错误的位置......我想我需要了解更多关于 django 的信息 - 目前我'我已经放弃了,因为我在很长一段时间内都没有走得太远。
      【解决方案3】:

      首先,不要在网上搜索 Django 帮助。仅在此处搜索:http://docs.djangoproject.com/en/dev/

      其次,当前用户是身份验证的一部分。

      http://docs.djangoproject.com/en/dev/topics/auth/#topics-auth

      用户被记录在请求中。 request.user

      【讨论】:

      • 第一点很好(我确实遇到了麻烦)。但是,一旦您尝试执行 django 文档中未涵盖的操作,接下来要做的就是深入研究代码。
      猜你喜欢
      • 2021-01-06
      • 1970-01-01
      • 2011-09-08
      • 2020-05-27
      • 2011-11-22
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多