diff --git a/doublethink/orm.py b/doublethink/orm.py index d4ec0f9..f77c771 100644 --- a/doublethink/orm.py +++ b/doublethink/orm.py @@ -164,12 +164,10 @@ class Document(dict, object): ''' if pk is None: return None - doc = cls(rr) - doc[doc.pk_field] = pk - try: - doc.refresh() - except KeyError: + d = rr.table(cls.table).get(pk).run() + if d is None: return None + doc = cls(rr, d) return doc @classmethod @@ -200,8 +198,9 @@ class Document(dict, object): dict.__setattr__(self, 'rr', rr) self._pk = None self._clear_updates() - for k in d: + for k in d or {}: self[k] = watch(d[k], callback=self._updated, field=k) + self.populate_defaults() def _clear_updates(self): self._updates = {} @@ -293,7 +292,6 @@ class Document(dict, object): touched. ''' should_insert = False - self.populate_defaults() try: self[self.pk_field] # raises KeyError if missing if self._updates: diff --git a/setup.py b/setup.py index 134708f..31c6879 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ import codecs setuptools.setup( name='doublethink', - version='0.2.0.dev70', + version='0.2.0.dev71', packages=['doublethink'], classifiers=[ 'Programming Language :: Python :: 2.7', diff --git a/tests/test_orm.py b/tests/test_orm.py index c9ec3d7..e353899 100644 --- a/tests/test_orm.py +++ b/tests/test_orm.py @@ -287,14 +287,16 @@ def test_default_values(rr): Person.table_ensure(rr) p = Person(rr, {}) - assert not "age" in p - assert p.age is None - p.save() assert p.age == 0 + assert not p.id + p.save() assert p.id + assert p.age == 0 p.age = 50 + assert p.age == 50 p.save() + assert p.age == 50 q = Person.load(rr, p.id) assert q.age == 50