Fix sequence fields in embedded documents (MongoEngine/mongoengine#166)

This commit is contained in:
Ross Lawley
2012-12-10 09:11:31 +00:00
parent 90d22c2a28
commit 9236f365fa
3 changed files with 34 additions and 2 deletions

View File

@@ -1338,7 +1338,7 @@ class SequenceField(IntField):
.. versionadded:: 0.5
"""
def __init__(self, collection_name=None, db_alias = None, sequence_name = None, *args, **kwargs):
def __init__(self, collection_name=None, db_alias=None, sequence_name=None, *args, **kwargs):
self.collection_name = collection_name or 'mongoengine.counters'
self.db_alias = db_alias or DEFAULT_CONNECTION_NAME
self.sequence_name = sequence_name
@@ -1348,7 +1348,7 @@ class SequenceField(IntField):
"""
Generate and Increment the counter
"""
sequence_name = self.sequence_name or self.owner_document._get_collection_name()
sequence_name = self.get_sequence_name()
sequence_id = "%s.%s" % (sequence_name, self.name)
collection = get_db(alias=self.db_alias)[self.collection_name]
counter = collection.find_and_modify(query={"_id": sequence_id},
@@ -1357,6 +1357,15 @@ class SequenceField(IntField):
upsert=True)
return counter['next']
def get_sequence_name(self):
if self.sequence_name:
return self.sequence_name
owner = self.owner_document
if issubclass(owner, Document):
return owner._get_collection_name()
else:
return owner._class_name
def __get__(self, instance, owner):
if instance is None: