【问题标题】:Django: Change filefield name from admin interfaceDjango:从管理界面更改文件字段名称
【发布时间】:2012-05-30 21:17:53
【问题描述】:

我正在开发一个 Django 界面,但在更改上传文件的名称时遇到问题。

这是我模型的一部分

class Test(models.Model):
    var = models.IntegerField()
    var1 = models.ManyToManyField('OtherClass')

    file = models.FileField(upload_to='dir/%d',storage=MyFileSystemStorage())

如您所见,我有一些多字段模型,我希望能够在保存文件时更改上传文件的名称。 我用自己的方法“MyfileSystemStorage”做到了,问题是我想在保存时将管理界面中的 var1 信息“选择”添加到文件名中。

是否有可能做到这一点以及如何做到这一点?如果有人可以帮助我,我将不胜感激..

感谢大家看到你

【问题讨论】:

  • 我没有看到任何相似之处,我没有使用任何形式,只使用 django 管理员上传,而且我遇到的困难之一是在管理界面中选择多字段信息。
  • django 管理员上传本身就是一个表单?您可以使用自定义 ModelAdmin docs.djangoproject.com/en/dev/ref/contrib/admin 覆盖它
  • 好的,谢谢,但是有没有办法获得多字段的选定值?如果是的话,再次感谢

标签: django file-upload django-admin filefield


【解决方案1】:
class ExampleForm(ModelForm):
    def save(self, commit=True):
        m = super(ExampleForm, self).save(commit=False)

        m2mvariable = self.cleaned_data['var1']
        # do stuff..

        if commit:
            m.save()
        return m

    class Meta:
        model = Test


class TestAdmin(admin.ModelAdmin):
    filter_horizontal = ('var1',)
    form = ExampleForm

admin.site.register(Test, TestAdmin)

对于您的其他评论:

如果你想要一个字符串表示,你可以为你的模型创建一个 unicode 方法,例如:

class Test(models.Model):
    #attrs...

    def __unicode__(self):
        return u"%s" % self.someattr

但是您可以对 m2m 结果做任何您想做的事情,您可以遍历它们:

for obj in results:
    print obj.attr

【讨论】:

  • 非常感谢!!因此,如果我现在想获取上传的“文件”路径(file.path)并将其复制到新路径/file.name 并将 m2mvariable 添加到 file.name 我该怎么做?我在想“shutil”,但不知道如何获取我的测试模型的 file.path 和 file.name 我对 python 和 django 有点陌生,很抱歉那些“新手”问题,但再次感谢回复我的时间
  • 好的,我完成了大部分工作,再次感谢你帮了我很多!最后一件事是 m2m 变量是 QuerySet 类型,当我打印它时,我得到“[]”,是否可以仅将“变量”作为字符串获取,还是我必须解析这个结果?
  • 你得到一个对象列表(查询集)。你可以对它们做任何你想做的事,我扩展了上面的例子。
  • 除了最后一件事之外的所有工作哈哈..我在尝试复制上传到另一个路径的文件之前解释过,因为我在我的管理类的保存方法中执行此操作我得到当我试图将上传路径中的文件复制到我的其他路径时,此错误“'InMemoryUploadedFile' 对象没有属性'路径'”,这可能是因为上传的文件尚未复制到路径。那么我该如何处理这个问题,我知道我问了很多事情,但这非常重要,再次感谢
  • 您可以更改或编写自己的文件处理后端。查看文档:docs.djangoproject.com/en/1.4/topics/http/file-uploads 这些是在设置中使用元组设置的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 2023-03-07
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 2014-10-15
相关资源
最近更新 更多