Accessing a missing field now returns None rather than raising an AttributeError

This commit is contained in:
Harry Marr
2009-12-24 17:10:36 +00:00
parent 3d70b65a45
commit f687bad202
5 changed files with 14 additions and 17 deletions

View File

@@ -28,12 +28,10 @@ class BaseField(object):
# Get value from document instance if available, if not use default
value = instance._data.get(self.name)
if value is None:
if self.default is not None:
value = self.default
if callable(value):
value = value()
else:
raise AttributeError(self.name)
value = self.default
# Allow callable default values
if callable(value):
value = value()
return value
def __set__(self, instance, value):
@@ -227,8 +225,8 @@ class BaseDocument(object):
def __contains__(self, name):
try:
getattr(self, name)
return True
val = getattr(self, name)
return val is not None
except AttributeError:
return False

View File

@@ -181,9 +181,8 @@ class ReferenceField(BaseField):
if isinstance(document, (str, unicode, pymongo.objectid.ObjectId)):
id_ = document
else:
try:
id_ = document.id
except:
id_ = document.id
if id_ is None:
raise ValidationError('You can only reference documents once '
'they have been saved to the database')