In my UserProfile model I would like to have a function which returns either the user's ImageFileField
object or a default image if the user has not uploaded their own.
For example:
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
I want to return an equivalent ImageFileField
because I have filters that work with this object type (so I can't just pass it a string, easily) ... I tried looking at the source code but I can't quite figure out how to do it myself.
Is there an easy way to initialize a new ImageFileField
object by passing it a path to an image file and then return it?
PS: I had thought about using a default setting for the ImageField, however, it seems less flexible because the file is stored at model creation ... and if I later want to change the default file, I would have to update all the database entries that had the old file.
It was probably a typo, but what you actually want to return is an ImageFieldFile
.
The ImageField
makes the property of the model instance actually aa ImageFileDescriptor
. When you access the property, it returns an ImageFieldFile
instance.
As long as you don't call the save()
or delete()
methods of the ImageFieldFile, you can instanciate one reasonably easily:
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')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With