added new test like defined in issue #712 and changed ObjectIdField to_python() method to use a try except similar to other Field classes

This commit is contained in:
mrigal 2014-12-10 16:44:16 +01:00
parent 1ce6a7f4be
commit 7a749b88c7
2 changed files with 12 additions and 2 deletions

View File

@ -410,8 +410,11 @@ class ObjectIdField(BaseField):
""" """
def to_python(self, value): def to_python(self, value):
try:
if not isinstance(value, ObjectId): if not isinstance(value, ObjectId):
value = ObjectId(value) value = ObjectId(value)
except:
pass
return value return value
def to_mongo(self, value): def to_mongo(self, value):

View File

@ -4578,6 +4578,13 @@ class QuerySetTest(unittest.TestCase):
self.assertEquals(Animal.objects(folded_ears=True).count(), 1) self.assertEquals(Animal.objects(folded_ears=True).count(), 1)
self.assertEquals(Animal.objects(whiskers_length=5.1).count(), 1) self.assertEquals(Animal.objects(whiskers_length=5.1).count(), 1)
def test_loop_via_invalid_id_does_not_crash(self):
class Person(Document):
name = StringField()
Person.objects.delete()
Person._get_collection().update({"name": "a"}, {"$set": {"_id": ""}}, upsert=True)
for p in Person.objects():
self.assertEqual(p.name, 'a')
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()