Django:从管理界面更改文件字段名

Django:从管理界面更改文件字段名,django,file-upload,django-admin,filefield,Django,File Upload,Django Admin,Filefield,我正在开发Django接口,但在更改上载文件的名称时遇到问题 这是我模型的一部分 class Test(models.Model): var = models.IntegerField() var1 = models.ManyToManyField('OtherClass') file = models.FileField(upload_to='dir/%d',storage=MyFileSystemStorage()) 正如你所看到的,我有一些很多字段模型,我希望能

我正在开发Django接口,但在更改上载文件的名称时遇到问题

这是我模型的一部分

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

    file = models.FileField(upload_to='dir/%d',storage=MyFileSystemStorage())
正如你所看到的,我有一些很多字段模型,我希望能够在保存文件时更改上传文件的名称。 我用我自己的方法“MyFileSystemStore”实现了这一点,问题是我想在保存文件时在管理界面中将var1信息“selected”添加到文件名中

有可能做到这一点吗?如何做到?如果有人能帮助我,我将不胜感激

谢谢大家,再见

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

相似:我没有看到任何相似之处,我没有使用任何表单仅django admin upload,还有一个困难是我要获得在管理界面中选择的许多字段信息。django admin upload本身就是一个表单?您可以用您的自定义ModelAdmin覆盖它,谢谢,但是有没有办法获得manytomanyfield的选定值?如果是的话,再次感谢汉克斯!!因此,如果我现在想获得上传的“file”路径(file.path),并将其复制到新路径/file.name,然后将m2mvariable添加到file.name,我该怎么做?我在想“shutil”,但不知道如何获取我的测试模型的file.path和file.name我对python和django有点陌生,很抱歉这些“新手”问题,但再次感谢你花了这么多时间回答我OK我完成了大部分工作再次感谢你帮了我很多!!最后一件事是m2m变量是QuerySet类型,当我打印它时,我会得到“[]”,是可以得到“变量”作为字符串还是我必须解析这个结果?你会得到一个对象列表(QuerySet)。你可以用它们做任何你想做的事,我扩展了上面的例子。除了最后一件事,所有的工作都可以,哈哈。。在我试图将上传的文件复制到另一个路径之前,我已经解释过了,因为我是在我的管理类的save方法中执行此操作的,所以当我试图将上传路径中的文件复制到另一个路径时,可能是因为上传的文件还没有被复制到该路径,所以出现了这样的错误“'InMemoryPloadeFile'对象没有属性'path'”。我知道我问了很多问题,但非常重要的是,再次感谢您,您可以更改或编写自己的文件处理后端。请参阅文档:这些是在设置中使用元组设置的