2012-05-24 105 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)。你可以隨心所欲地做任何事情,我擴展了上面的例子。 –

相關問題