在我的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使用默认设置,但是,它似乎不太灵活,因为文件存储在模型创建中......如果我后来想要更改默认文件,我将不得不更新所有具有旧文件的数据库条目。
答案 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')