Skip to content

Commit a457212

Browse files
committed
Don't fail serializing querysets of non-models
1 parent dafda82 commit a457212

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

inertia/tests/test_encoder.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,21 @@
77
from inertia.utils import InertiaJsonEncoder
88

99

10+
def make_brandon() -> User:
11+
return User(
12+
name="Brandon",
13+
password="something-top-secret",
14+
birthdate=date(1987, 2, 15),
15+
registered_at=datetime(2022, 10, 31, 10, 13, 1),
16+
)
17+
18+
1019
class InertiaJsonEncoderTestCase(TestCase):
1120
def setUp(self):
1221
self.encode = lambda obj: dumps(obj, cls=InertiaJsonEncoder)
1322

1423
def test_it_handles_models_with_dates_and_removes_passwords(self):
15-
user = User(
16-
name="Brandon",
17-
password="something-top-secret",
18-
birthdate=date(1987, 2, 15),
19-
registered_at=datetime(2022, 10, 31, 10, 13, 1),
20-
)
24+
user = make_brandon()
2125

2226
self.assertEqual(
2327
dumps(
@@ -51,12 +55,7 @@ def test_it_handles_inertia_meta_fields(self):
5155
)
5256

5357
def test_it_handles_querysets(self):
54-
User(
55-
name="Brandon",
56-
password="something-top-secret",
57-
birthdate=date(1987, 2, 15),
58-
registered_at=datetime(2022, 10, 31, 10, 13, 1),
59-
).save()
58+
make_brandon().save()
6059

6160
self.assertEqual(
6261
dumps(
@@ -71,3 +70,12 @@ def test_it_handles_querysets(self):
7170
),
7271
self.encode(User.objects.all()),
7372
)
73+
74+
75+
def test_it_handles_non_model_querysets(self):
76+
user = make_brandon()
77+
user.save()
78+
self.assertEqual(
79+
self.encode(User.objects.values_list("name", flat=True)),
80+
self.encode([user.name]),
81+
)

inertia/utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ def default(self, value):
2424
return model_to_dict(value)
2525

2626
if isinstance(value, QuerySet):
27-
return [model_to_dict(model) for model in value]
27+
return [
28+
(model_to_dict(obj) if isinstance(value.model, models.Model) else obj)
29+
for obj in value
30+
]
2831

2932
return super().default(value)
3033

0 commit comments

Comments
 (0)