Merge remote-tracking branch 'origin/pr/391' into 391

This commit is contained in:
Ross Lawley 2013-07-10 14:10:09 +00:00
commit 9d16364394

View File

@ -1190,9 +1190,7 @@ class FileField(BaseField):
# Check if a file already exists for this model # Check if a file already exists for this model
grid_file = instance._data.get(self.name) grid_file = instance._data.get(self.name)
if not isinstance(grid_file, self.proxy_class): if not isinstance(grid_file, self.proxy_class):
grid_file = self.proxy_class(key=self.name, instance=instance, grid_file = self.get_proxy_obj(key=key, instance=instance)
db_alias=self.db_alias,
collection_name=self.collection_name)
instance._data[self.name] = grid_file instance._data[self.name] = grid_file
if not grid_file.key: if not grid_file.key:
@ -1214,14 +1212,22 @@ class FileField(BaseField):
pass pass
# Create a new proxy object as we don't already have one # Create a new proxy object as we don't already have one
instance._data[key] = self.proxy_class(key=key, instance=instance, instance._data[key] = self.get_proxy_obj(key=key, instance=instance)
db_alias=self.db_alias,
collection_name=self.collection_name)
instance._data[key].put(value) instance._data[key].put(value)
else: else:
instance._data[key] = value instance._data[key] = value
instance._mark_as_changed(key) instance._mark_as_changed(key)
def get_proxy_obj(self, key, instance, db_alias=None, collection_name=None):
if db_alias is None:
db_alias = self.db_alias
if collection_name is None:
collection_name = self.collection_name
return self.proxy_class(key=key, instance=instance,
db_alias=db_alias,
collection_name=collection_name)
def to_mongo(self, value): def to_mongo(self, value):
# Store the GridFS file id in MongoDB # Store the GridFS file id in MongoDB
@ -1255,6 +1261,11 @@ class ImageGridFsProxy(GridFSProxy):
applying field properties (size, thumbnail_size) applying field properties (size, thumbnail_size)
""" """
field = self.instance._fields[self.key] field = self.instance._fields[self.key]
# if the field from the instance has an attribute field
# we use that one and hope for the best. Usually only container
# fields have a field attribute.
if hasattr(field, 'field'):
field = field.field
try: try:
img = Image.open(file_obj) img = Image.open(file_obj)