Added changeset, updated documentation and tests, changed test condition
This commit is contained in:
		| @@ -16,6 +16,7 @@ Changes in 0.9.X - DEV | |||||||
| - Django support was removed and will be available as a separate extension. #958 | - Django support was removed and will be available as a separate extension. #958 | ||||||
| - Don't send a "cls" option to ensureIndex (related to https://jira.mongodb.org/browse/SERVER-769) | - Don't send a "cls" option to ensureIndex (related to https://jira.mongodb.org/browse/SERVER-769) | ||||||
| - Fix for updating sorting in SortedListField. #978 | - Fix for updating sorting in SortedListField. #978 | ||||||
|  | - Added __ support to escape field name in fields lookup keywords that match operators names #949 | ||||||
|  |  | ||||||
| Changes in 0.9.0 | Changes in 0.9.0 | ||||||
| ================ | ================ | ||||||
|   | |||||||
| @@ -39,6 +39,14 @@ syntax:: | |||||||
|     # been written by a user whose 'country' field is set to 'uk' |     # been written by a user whose 'country' field is set to 'uk' | ||||||
|     uk_pages = Page.objects(author__country='uk') |     uk_pages = Page.objects(author__country='uk') | ||||||
|  |  | ||||||
|  | .. note:: | ||||||
|  |  | ||||||
|  |    (version **0.9.0+**) if your field name is like mongodb operator name (for example | ||||||
|  |    type, lte, lt...) and you want to place it at the end of lookup keyword | ||||||
|  |    mongoengine automatically  prepend $ to it. To avoid this use  __ at the end of | ||||||
|  |    your lookup keyword. For example if you field name is ``type`` and you want to | ||||||
|  |    query by this field you must use ``.objects(user__type__="admin")`` instead of | ||||||
|  |    ``.objects(user__type="admin")`` | ||||||
|  |  | ||||||
| Query operators | Query operators | ||||||
| =============== | =============== | ||||||
| @@ -663,4 +671,3 @@ following example shows how the substitutions are made:: | |||||||
|         return comments; |         return comments; | ||||||
|     } |     } | ||||||
|     """) |     """) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -44,7 +44,8 @@ def query(_doc_cls=None, _field_operation=False, **query): | |||||||
|         if len(parts) > 1 and parts[-1] in MATCH_OPERATORS: |         if len(parts) > 1 and parts[-1] in MATCH_OPERATORS: | ||||||
|             op = parts.pop() |             op = parts.pop() | ||||||
|  |  | ||||||
|         if len(parts) > 1 and not parts[-1]: |         #if user escape field name by __ | ||||||
|  |         if len(parts) > 1 and parts[-1]=="": | ||||||
|             parts.pop() |             parts.pop() | ||||||
|  |  | ||||||
|         negate = False |         negate = False | ||||||
|   | |||||||
| @@ -4595,16 +4595,18 @@ class QuerySetTest(unittest.TestCase): | |||||||
|     def test_last_field_name_like_operator(self): |     def test_last_field_name_like_operator(self): | ||||||
|         class EmbeddedItem(EmbeddedDocument): |         class EmbeddedItem(EmbeddedDocument): | ||||||
|             type = StringField() |             type = StringField() | ||||||
|  |             name = StringField() | ||||||
|  |  | ||||||
|         class Doc(Document): |         class Doc(Document): | ||||||
|             item = EmbeddedDocumentField(EmbeddedItem) |             item = EmbeddedDocumentField(EmbeddedItem) | ||||||
|  |  | ||||||
|         Doc.drop_collection() |         Doc.drop_collection() | ||||||
|  |  | ||||||
|         doc = Doc(item=EmbeddedItem(type="axe")) |         doc = Doc(item=EmbeddedItem(type="axe", name="Heroic axe")) | ||||||
|         doc.save() |         doc.save() | ||||||
|  |  | ||||||
|         self.assertEqual(1, Doc.objects(item__type__="axe").count()) |         self.assertEqual(1, Doc.objects(item__type__="axe").count()) | ||||||
|  |         self.assertEqual(1, Doc.objects(item__name__="Heroic axe").count()) | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user