Создать и вернуть стандартный ImageFieldFile изнутри функции
В моей модели 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
потому что у меня есть фильтры, которые работают с этим типом объекта (поэтому я не могу просто передать ему строку) ... Я попытался посмотреть на исходный код, но я не могу понять, как это сделать сам.
Есть ли простой способ инициализировать новый ImageFileField
объект, передав ему путь к файлу изображения, а затем вернуть его?
PS: я думал об использовании настройки по умолчанию для ImageField, однако он кажется менее гибким, потому что файл сохраняется при создании модели... и если позже я захочу изменить файл по умолчанию, мне придется обновить всю базу данных записи, которые имели старый файл.
1 ответ
Вероятно, это была опечатка, но на самом деле вы хотите вернуть ImageFieldFile
,
ImageField
делает свойство экземпляра модели на самом деле аа ImageFileDescriptor
, Когда вы получаете доступ к свойству, он возвращает ImageFieldFile
пример.
Пока ты не называешь save()
или же delete()
Методы ImageFieldFile, вы можете легко создать один из них:
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')