2012-05-24 84 views
0

我正在开发一个Django界面,并且更改上传文件的名称时出现问题。Django:从管理界面更改文件字段的名称

这里是我的模型

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

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

的一部分,正如你所看到的,我有一些manytomanyfield模型,我希望能够改变,当我将它保存上传我的文件的名称。 我用我自己的方法“MyfileSystemStorage”做了,问题是我想在管理界面添加var1信息“selected”到我保存时的文件名。

有没有可能做到这一点,怎么做?请如果有人可以帮助我,我将不胜感激..

感谢所有再见

+0

类似:http://stackoverflow.com/questions/4840138/django-file-upload-filename-not-sticking –

+0

我没有看到任何相似之处,我没有使用任何形式只有django管理员上传和我还有一个困难就是要在管理界面中选择多个多域信息。 – user1336204

+0

django admin upload是一种表单本身吗?你可以用你自定义的ModelAdmin覆盖它https://docs.djangoproject.com/zh/dev/ref/contrib/admin/ –

回答

0
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) 

您的其他评论:

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

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

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

但是你可以做任何你想要与你的M2M结果,你可以遍历它们:

for obj in results: 
    print obj.attr 
+0

非常感谢!所以如果我现在想要获取上传的“文件”(file.path)的路径并将其复制到新路径/ file.name并将m2mvariable添加到file.name,我该怎么做?我正在考虑“shutil”,但不知道如何获得我的测试模型的file.path和file.name我对python和django有点新,所以对于“新手”问题感到抱歉,但再次感谢花回答我的时间 – user1336204

+0

好的,我做了大部分工作,再次感谢你帮助了我很多!最后一件事是,m2m变量是一个QuerySet类型,当我打印它时,我得到“[]”,是否有可能获得“变量”只能作为一个字符串或我必须解析这个结果? – user1336204

+0

你得到一个对象列表(queryset)。你可以随心所欲地做任何事情,我扩展了上面的例子。 –

相关问题