Skip to content

Commit 765aa49

Browse files
committed
Clean ups
1 parent 6b24346 commit 765aa49

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

django_mongodb_backend/fields/embedded_model_array.py

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def __init__(self, key_name, array_field, *args, **kwargs):
135135
self.key_name = key_name
136136
# The iteration items begins from the base_field, a virtual column with
137137
# base field output type is created.
138-
column_target = array_field.base_field.embedded_model._meta.get_field(key_name).clone()
138+
column_target = array_field.embedded_model._meta.get_field(key_name).clone()
139139
column_name = f"$item.{key_name}"
140140
column_target.db_column = column_name
141141
column_target.set_attributes_from_name(column_name)
@@ -155,10 +155,10 @@ def _get_missing_field_or_lookup_exception(self, lhs, name):
155155
suggested_lookups = " or ".join(suggested_lookups)
156156
suggestion = f", perhaps you meant {suggested_lookups}?"
157157
else:
158-
suggestion = "."
158+
suggestion = ""
159159
raise FieldDoesNotExist(
160160
f"Unsupported lookup '{name}' for "
161-
f"{self.array_field.base_field.__class__.__name__} '{self.array_field.base_field.name}'"
161+
f"EmbeddedModelArrayField of '{lhs.__class__.__name__}'"
162162
f"{suggestion}"
163163
)
164164

@@ -169,17 +169,10 @@ def get_transform(self, name):
169169
"""
170170
# Once the sub lhs is a transform, all the filter are applied over it.
171171
# Otherwise get transform from EMF.
172-
transform = (
173-
self._lhs.get_transform(name)
174-
if isinstance(self._lhs, Transform)
175-
else self.array_field.embedded_model._meta.get_field(self.key_name).get_transform(name)
176-
)
177-
if transform:
172+
if transform := self._lhs.get_transform(name):
178173
self._sub_transform = transform
179174
return self
180-
raise self._get_missing_field_or_lookup_exception(
181-
self._lhs if isinstance(self._lhs, Transform) else self.base_field, name
182-
)
175+
raise self._get_missing_field_or_lookup_exception(self._lhs.output_field, name)
183176

184177
def as_mql(self, compiler, connection):
185178
inner_lhs_mql = self._lhs.as_mql(compiler, connection)

tests/model_fields_/test_embedded_model_array.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from datetime import date
22

3+
from django.core.exceptions import FieldDoesNotExist
34
from django.db import connection, models
45
from django.test import SimpleTestCase, TestCase
56
from django.test.utils import CaptureQueriesContext, isolate_apps
@@ -222,6 +223,30 @@ def test_overlap_simplefield(self):
222223
MuseumExhibit.objects.filter(sections__section_number__overlap=[3]), []
223224
)
224225

226+
def test_missing_field(self):
227+
msg = "ExhibitSection has no field named 'section'"
228+
with self.assertRaisesMessage(FieldDoesNotExist, msg):
229+
self.assertSequenceEqual(
230+
MuseumExhibit.objects.filter(sections__section__overlap=[10]), []
231+
)
232+
233+
def test_missing_lookup(self):
234+
msg = "Unsupported lookup 'return' for EmbeddedModelArrayField of type 'IntegerField'"
235+
with self.assertRaisesMessage(FieldDoesNotExist, msg):
236+
self.assertSequenceEqual(
237+
MuseumExhibit.objects.filter(sections__section_number__return=3), []
238+
)
239+
240+
def test_missing_lookup_suggestions(self):
241+
msg = (
242+
"Unsupported lookup 'ltee' for EmbeddedModelArrayField of 'IntegerField', "
243+
"perhaps you meant lte or lt?"
244+
)
245+
with self.assertRaisesMessage(FieldDoesNotExist, msg):
246+
self.assertSequenceEqual(
247+
MuseumExhibit.objects.filter(sections__section_number__ltee=3), []
248+
)
249+
225250

226251
@isolate_apps("model_fields_")
227252
class CheckTests(SimpleTestCase):

0 commit comments

Comments
 (0)