Иногда, компилятор будет оптимизировать поле и использовать регистр для хранения его. Если поток 1 сделает запись к полю, и другой поток получает доступ к нему, так как обновление было сохранено в регистре (и не память), 2-й поток получит устаревшие данные.
можно думать об энергозависимом ключевом слове, что к компилятору "Я хочу, чтобы Вы сохранили это значение в памяти". Это гарантирует, что 2-й поток получает последнее значение.
Вероятно, это была опечатка, но на самом деле вы хотите вернуть ImageFieldFile
.
ImageField
делает свойство модели на самом деле экземпляр aa 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')