Merge pull request #1652 from erdenezul/generic_embedded_query
Subfield resolve error in generic_emdedded_document query #1651
This commit is contained in:
		| @@ -694,6 +694,14 @@ class GenericEmbeddedDocumentField(BaseField): | ||||
|  | ||||
|         value.validate(clean=clean) | ||||
|  | ||||
|     def lookup_member(self, member_name): | ||||
|         if self.choices: | ||||
|             for choice in self.choices: | ||||
|                 field = choice._fields.get(member_name) | ||||
|                 if field: | ||||
|                     return field | ||||
|         return None | ||||
|  | ||||
|     def to_mongo(self, document, use_db_field=True, fields=None): | ||||
|         if document is None: | ||||
|             return None | ||||
|   | ||||
| @@ -4790,6 +4790,30 @@ class QuerySetTest(unittest.TestCase): | ||||
|         for obj in C.objects.no_sub_classes(): | ||||
|             self.assertEqual(obj.__class__, C) | ||||
|  | ||||
|     def test_query_generic_embedded_document(self): | ||||
|         """Ensure that querying sub field on generic_embedded_field works | ||||
|         """ | ||||
|         class A(EmbeddedDocument): | ||||
|             a_name = StringField() | ||||
|  | ||||
|         class B(EmbeddedDocument): | ||||
|             b_name = StringField() | ||||
|  | ||||
|         class Doc(Document): | ||||
|             document = GenericEmbeddedDocumentField(choices=(A, B)) | ||||
|  | ||||
|         Doc.drop_collection() | ||||
|         Doc(document=A(a_name='A doc')).save() | ||||
|         Doc(document=B(b_name='B doc')).save() | ||||
|  | ||||
|         # Using raw in filter working fine | ||||
|         self.assertEqual(Doc.objects( | ||||
|             __raw__={'document.a_name': 'A doc'}).count(), 1) | ||||
|         self.assertEqual(Doc.objects( | ||||
|             __raw__={'document.b_name': 'B doc'}).count(), 1) | ||||
|         self.assertEqual(Doc.objects(document__a_name='A doc').count(), 1) | ||||
|         self.assertEqual(Doc.objects(document__b_name='B doc').count(), 1) | ||||
|  | ||||
|     def test_query_reference_to_custom_pk_doc(self): | ||||
|  | ||||
|         class A(Document): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user