从函数内部创建并返回默认的ImageFieldFile

tho*_*mad 5 django django-models

在我的用户配置模式,我想有它返回一个函数或者用户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
Run Code Online (Sandbox Code Playgroud)

我想返回一个等价物,ImageFileField因为我有使用此对象类型的过滤器(所以我不能简单地将它传递给它一个字符串)...我试着查看源代码,但我无法弄清楚如何自己动手吧.

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

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

Smi*_*ris 11

这可能是一个错字,但你真正想要回归的是一个ImageFieldFile.

ImageField使模型实例实际上AA的财产ImageFileDescriptor.当您访问该属性时,它将返回一个ImageFieldFile实例.

只要您不调用ImageFieldFile 的save()or或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')
Run Code Online (Sandbox Code Playgroud)