Merge remote-tracking branch 'origin/pr/319'
This commit is contained in:
commit
e402157b4d
2
AUTHORS
2
AUTHORS
@ -25,7 +25,7 @@ that much better:
|
|||||||
* flosch
|
* flosch
|
||||||
* Deepak Thukral
|
* Deepak Thukral
|
||||||
* Colin Howe
|
* Colin Howe
|
||||||
* Wilson Júnior
|
* Wilson Júnior (https://github.com/wpjunior)
|
||||||
* Alistair Roche
|
* Alistair Roche
|
||||||
* Dan Crosta
|
* Dan Crosta
|
||||||
* Viktor Kerkez
|
* Viktor Kerkez
|
||||||
|
@ -1442,6 +1442,17 @@ class SequenceField(BaseField):
|
|||||||
upsert=True)
|
upsert=True)
|
||||||
return self.value_decorator(counter['next'])
|
return self.value_decorator(counter['next'])
|
||||||
|
|
||||||
|
def get_next_value(self):
|
||||||
|
sequence_name = self.get_sequence_name()
|
||||||
|
sequence_id = "%s.%s" % (sequence_name, self.name)
|
||||||
|
collection = get_db(alias=self.db_alias)[self.collection_name]
|
||||||
|
data = collection.find_one({"_id": sequence_id})
|
||||||
|
|
||||||
|
if data:
|
||||||
|
return self.value_decorator(data['next']+1)
|
||||||
|
|
||||||
|
return self.value_decorator(1)
|
||||||
|
|
||||||
def get_sequence_name(self):
|
def get_sequence_name(self):
|
||||||
if self.sequence_name:
|
if self.sequence_name:
|
||||||
return self.sequence_name
|
return self.sequence_name
|
||||||
|
@ -1898,6 +1898,38 @@ class FieldTest(unittest.TestCase):
|
|||||||
c = self.db['mongoengine.counters'].find_one({'_id': 'person.id'})
|
c = self.db['mongoengine.counters'].find_one({'_id': 'person.id'})
|
||||||
self.assertEqual(c['next'], 1000)
|
self.assertEqual(c['next'], 1000)
|
||||||
|
|
||||||
|
|
||||||
|
def test_sequence_field_get_next_value(self):
|
||||||
|
class Person(Document):
|
||||||
|
id = SequenceField(primary_key=True)
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
self.db['mongoengine.counters'].drop()
|
||||||
|
Person.drop_collection()
|
||||||
|
|
||||||
|
for x in xrange(10):
|
||||||
|
Person(name="Person %s" % x).save()
|
||||||
|
|
||||||
|
self.assertEqual(Person.id.get_next_value(), 11)
|
||||||
|
self.db['mongoengine.counters'].drop()
|
||||||
|
|
||||||
|
self.assertEqual(Person.id.get_next_value(), 1)
|
||||||
|
|
||||||
|
class Person(Document):
|
||||||
|
id = SequenceField(primary_key=True, value_decorator=str)
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
self.db['mongoengine.counters'].drop()
|
||||||
|
Person.drop_collection()
|
||||||
|
|
||||||
|
for x in xrange(10):
|
||||||
|
Person(name="Person %s" % x).save()
|
||||||
|
|
||||||
|
self.assertEqual(Person.id.get_next_value(), '11')
|
||||||
|
self.db['mongoengine.counters'].drop()
|
||||||
|
|
||||||
|
self.assertEqual(Person.id.get_next_value(), '1')
|
||||||
|
|
||||||
def test_sequence_field_sequence_name(self):
|
def test_sequence_field_sequence_name(self):
|
||||||
class Person(Document):
|
class Person(Document):
|
||||||
id = SequenceField(primary_key=True, sequence_name='jelly')
|
id = SequenceField(primary_key=True, sequence_name='jelly')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user