From aa00feb6a55eba7f720969828242436103817e64 Mon Sep 17 00:00:00 2001 From: Florian Schlachter Date: Tue, 20 Jul 2010 22:46:00 +0200 Subject: [PATCH] FileField's values are now optional. When no value is applied, no File object is created and referenced. --- mongoengine/base.py | 4 ++-- mongoengine/fields.py | 13 +++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index 806d83bb..086c7874 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -339,8 +339,8 @@ class BaseDocument(object): try: field._validate(value) except (ValueError, AttributeError, AssertionError), e: - raise ValidationError('Invalid value for field of type "' + - field.__class__.__name__ + '"') + raise ValidationError('Invalid value for field of type "%s": %s' + % (field.__class__.__name__, value)) elif field.required: raise ValidationError('Field "%s" is required' % field.name) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 759697ac..f84f751b 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -591,15 +591,20 @@ class FileField(BaseField): def to_mongo(self, value): # Store the GridFS file id in MongoDB - return self.gridfs.grid_id + if self.gridfs.grid_id is not None: + return self.gridfs.grid_id + return None def to_python(self, value): # Use stored value (id) to lookup file in GridFS - return self.gridfs.get(id=value) + if self.gridfs.grid_id is not None: + return self.gridfs.get(id=value) + return None def validate(self, value): - assert isinstance(value, GridFSProxy) - assert isinstance(value.grid_id, pymongo.objectid.ObjectId) + if value.grid_id is not None: + assert isinstance(value, GridFSProxy) + assert isinstance(value.grid_id, pymongo.objectid.ObjectId) class GeoPointField(BaseField): """A list storing a latitude and longitude.