|
21 | 21 | from mongoengine.queryset import ( |
22 | 22 | DoesNotExist, |
23 | 23 | MultipleObjectsReturned, |
| 24 | + Q, |
24 | 25 | QuerySet, |
25 | 26 | QuerySetManager, |
26 | 27 | queryset_manager, |
@@ -4674,6 +4675,34 @@ class Person(Document): |
4674 | 4675 | ("Gabriel Falcao", 23, "New York"), |
4675 | 4676 | ] |
4676 | 4677 |
|
| 4678 | + def test_scalar_embedded_null_parents(self): |
| 4679 | + """Test a multi-scalar query on embedded fields raises an exception when the parent field is null.""" |
| 4680 | + |
| 4681 | + class EmbeddedModelA(EmbeddedDocument): |
| 4682 | + designator = StringField() |
| 4683 | + |
| 4684 | + class Container(Document): |
| 4685 | + source = EmbeddedDocumentField(EmbeddedModelA) |
| 4686 | + target = EmbeddedDocumentField(EmbeddedModelA, null=True) |
| 4687 | + |
| 4688 | + Container( |
| 4689 | + source=EmbeddedModelA(designator="value1"), |
| 4690 | + target=EmbeddedModelB(designator="value2"), |
| 4691 | + ).save() |
| 4692 | + |
| 4693 | + Container( |
| 4694 | + source=EmbeddedModelA(designator="value1"), |
| 4695 | + target=None, |
| 4696 | + ).save() |
| 4697 | + |
| 4698 | + queryset = Container.objects.filter( |
| 4699 | + Q(source__designator="value1") | Q(target__designator="value2") |
| 4700 | + ).values_list("source__designator", "target__designator") |
| 4701 | + # This should not raise an AttributeError on NoneType for the second Container's |
| 4702 | + # target__designator |
| 4703 | + values = list(queryset) |
| 4704 | + assert values == ["value1", "value2"] |
| 4705 | + |
4677 | 4706 | def test_scalar_decimal(self): |
4678 | 4707 | from decimal import Decimal |
4679 | 4708 |
|
|
0 commit comments