Это будет иметь никакой эффект.
Часть рекомендаций для записи CLS-совместимых библиотек не должна иметь двух общедоступных/защищать объектов, которые отличаются только случаем, например, Вы должны НЕ , имеют
public void foo() {...}
и
public void Foo() {...}
, что Вы описываете, не проблема, потому что частный объект не доступен пользователю библиотеки
У меня есть код который извлекает изображение из Интернета и сохраняет его в модели. Важные части:
from django.core.files import File # you need this somewhere
import urllib
# The following actually resides in a method of my model
result = urllib.urlretrieve(image_url) # image_url is a URL to an image
# self.photo is the ImageField
self.photo.save(
os.path.basename(self.url),
File(open(result[0], 'rb'))
)
self.save()
Это немного сбивает с толку, потому что это вытащено из моей модели и немного вне контекста, но важные части:
Дайте мне знать, если у вас есть вопросы или вам нужны пояснения.
Изменить: для ясности, вот модель (за вычетом любых требуемых операторов импорта):
class CachedImage(models.Model):
url = models.CharField(max_length=255, unique=True)
photo = models.ImageField(upload_to=photo_path, blank=True)
def cache(self):
"""Store image locally if we have a URL"""
if self.url and not self.photo:
result = urllib.urlretrieve(self.url)
self.photo.save(
os.path.basename(self.url),
File(open(result[0], 'rb'))
)
self.save()
Возможно, это не тот ответ, который вы ищете. но вы можете использовать charfield для хранения пути к файлу вместо ImageFile. Таким образом вы можете программно связать загруженное изображение с полем без повторного создания файла.
Небольшое замечание. tvon ответ работает, но, если вы работаете на windows, вы, вероятно, захотите open()
файл с 'rb'
. Например, так:
class CachedImage(models.Model):
url = models.CharField(max_length=255, unique=True)
photo = models.ImageField(upload_to=photo_path, blank=True)
def cache(self):
"""Store image locally if we have a URL"""
if self.url and not self.photo:
result = urllib.urlretrieve(self.url)
self.photo.save(
os.path.basename(self.url),
File(open(result[0], 'rb'))
)
self.save()
иначе ваш файл будет усечен на первом 0x1A
байте.