mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #35996 -- Fixed database serialization crash when serializing a many-to-many field that had a prefetch.
This commit is contained in:
committed by
Sarah Boyce
parent
a8b70aeffd
commit
20f9f61805
@@ -74,7 +74,11 @@ class Serializer(base.Serializer):
|
||||
return value.natural_key()
|
||||
|
||||
def queryset_iterator(obj, field):
|
||||
return getattr(obj, field.name).iterator()
|
||||
attr = getattr(obj, field.name)
|
||||
chunk_size = (
|
||||
2000 if getattr(attr, "prefetch_cache_name", None) else None
|
||||
)
|
||||
return attr.iterator(chunk_size)
|
||||
|
||||
else:
|
||||
|
||||
@@ -82,12 +86,9 @@ class Serializer(base.Serializer):
|
||||
return self._value_from_field(value, value._meta.pk)
|
||||
|
||||
def queryset_iterator(obj, field):
|
||||
return (
|
||||
getattr(obj, field.name)
|
||||
.select_related(None)
|
||||
.only("pk")
|
||||
.iterator()
|
||||
)
|
||||
query_set = getattr(obj, field.name).select_related(None).only("pk")
|
||||
chunk_size = 2000 if query_set._prefetch_related_lookups else None
|
||||
return query_set.iterator(chunk_size=chunk_size)
|
||||
|
||||
m2m_iter = getattr(obj, "_prefetched_objects_cache", {}).get(
|
||||
field.name,
|
||||
|
||||
@@ -148,7 +148,11 @@ class Serializer(base.Serializer):
|
||||
self.xml.endElement("object")
|
||||
|
||||
def queryset_iterator(obj, field):
|
||||
return getattr(obj, field.name).iterator()
|
||||
attr = getattr(obj, field.name)
|
||||
chunk_size = (
|
||||
2000 if getattr(attr, "prefetch_cache_name", None) else None
|
||||
)
|
||||
return attr.iterator(chunk_size)
|
||||
|
||||
else:
|
||||
|
||||
@@ -156,12 +160,9 @@ class Serializer(base.Serializer):
|
||||
self.xml.addQuickElement("object", attrs={"pk": str(value.pk)})
|
||||
|
||||
def queryset_iterator(obj, field):
|
||||
return (
|
||||
getattr(obj, field.name)
|
||||
.select_related(None)
|
||||
.only("pk")
|
||||
.iterator()
|
||||
)
|
||||
query_set = getattr(obj, field.name).select_related(None).only("pk")
|
||||
chunk_size = 2000 if query_set._prefetch_related_lookups else None
|
||||
return query_set.iterator(chunk_size=chunk_size)
|
||||
|
||||
m2m_iter = getattr(obj, "_prefetched_objects_cache", {}).get(
|
||||
field.name,
|
||||
|
||||
Reference in New Issue
Block a user