创造&从函数内部返回默认的ImageFieldFile

时间:2009-10-15 00:28:00

标签: django django-models

在我的UserProfile模型中,我希望有一个函数返回 用户的ImageFileField对象或默认图像(如果用户没有上传自己的对象)。

例如:

class UserProfile(models.Model):
    pic = models.ImageField('Headshot',blank=True,
                             upload_to=get_path_and_filename)

    def get_pic(self):
        if self.pic:
            return self.pic
        else:
            # return ImageFileField with a default value

我想返回一个等效的ImageFileField,因为我有使用此对象类型的过滤器(所以我不能简单地将它传递给字符串)...我试着查看{{3}但我无法弄明白自己该怎么做。

是否有一种简单的方法来初始化新的ImageFileField对象,方法是将其传递给图像文件,然后将其返回?

PS:我曾考虑过为ImageField使用默认设置,但是,它似乎不太灵活,因为文件存储在模型创建中......如果我后来想要更改默认文件,我将不得不更新所有具有旧文件的数据库条目。

1 个答案:

答案 0 :(得分:11)

这可能是一个错字,但您实际想要返回的是ImageFieldFile

ImageField使模型实例的属性实际上为a ImageFileDescriptor。当您访问该属性时,它将返回ImageFieldFile实例。

只要您不调用ImageFieldFile的save()delete()方法,就可以合理地实现一个方法:

from django.db.models.fields.files import ImageFieldFile, FileField

class UserProfile(models.Model):
    # ...

    def get_pic(self):
        if self.pic:
            return self.pic
        return ImageFieldFile(instance=None, field=FileField(),
                              name='pictures/default.jpg')