1
0
mirror of https://github.com/django/django.git synced 2025-10-24 14:16:09 +00:00

Fixed #34620 -- Fixed serialization crash on m2m fields without natural keys when base querysets use select_related().

Regression in 19e0587ee5.

Thanks Martin Svoboda for the report.
This commit is contained in:
Mariusz Felisiak
2023-06-04 20:49:07 +02:00
committed by GitHub
parent 1136aa5005
commit f9936deed1
9 changed files with 38 additions and 10 deletions

View File

@@ -277,14 +277,14 @@ class SerializersTestBase:
def test_serialize_prefetch_related_m2m(self):
# One query for the Article table and one for each prefetched m2m
# field.
with self.assertNumQueries(3):
with self.assertNumQueries(4):
serializers.serialize(
self.serializer_name,
Article.objects.prefetch_related("categories", "meta_data"),
Article.objects.prefetch_related("categories", "meta_data", "topics"),
)
# One query for the Article table, and two m2m queries for each
# One query for the Article table, and three m2m queries for each
# article.
with self.assertNumQueries(5):
with self.assertNumQueries(7):
serializers.serialize(self.serializer_name, Article.objects.all())
def test_serialize_with_null_pk(self):
@@ -409,7 +409,7 @@ class SerializersTestBase:
self.assertEqual(self._get_field_values(child_data, "parent_data"), [])
def test_serialize_only_pk(self):
with self.assertNumQueries(5) as ctx:
with self.assertNumQueries(7) as ctx:
serializers.serialize(
self.serializer_name,
Article.objects.all(),
@@ -420,9 +420,11 @@ class SerializersTestBase:
self.assertNotIn(connection.ops.quote_name("meta_data_id"), categories_sql)
meta_data_sql = ctx[2]["sql"]
self.assertNotIn(connection.ops.quote_name("kind"), meta_data_sql)
topics_data_sql = ctx[3]["sql"]
self.assertNotIn(connection.ops.quote_name("category_id"), topics_data_sql)
def test_serialize_no_only_pk_with_natural_keys(self):
with self.assertNumQueries(5) as ctx:
with self.assertNumQueries(7) as ctx:
serializers.serialize(
self.serializer_name,
Article.objects.all(),
@@ -434,6 +436,8 @@ class SerializersTestBase:
# CategoryMetaData has natural_key().
meta_data_sql = ctx[2]["sql"]
self.assertIn(connection.ops.quote_name("kind"), meta_data_sql)
topics_data_sql = ctx[3]["sql"]
self.assertNotIn(connection.ops.quote_name("category_id"), topics_data_sql)
class SerializerAPITests(SimpleTestCase):