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

时间:2012-05-24 09:43:35

标签: 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())

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

是否可以这样做以及如何做?如果有人可以帮助我,我将不胜感激。

感谢所有人看到你

1 个答案:

答案 0 :(得分: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)

您的其他评论:

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

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

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

但是你可以用你的m2m结果做任何你想做的事情,你可以迭代它们:

for obj in results:
    print obj.attr