diff --git a/django/db/models/base.py b/django/db/models/base.py index 3c1cb9a119..28c2699043 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -204,7 +204,7 @@ class ModelBase(type): if base not in parents or not hasattr(base, '_meta'): # Things without _meta aren't functional models, so they're # uninteresting parents. - inherited_attributes |= set(base.__dict__.keys()) + inherited_attributes.update(base.__dict__) continue parent_fields = base._meta.local_fields + base._meta.local_many_to_many diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 5c3eca0032..a1c1c4be38 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -1017,7 +1017,7 @@ class Query: ) # The used_joins for a tuple of expressions is the union of # the used_joins for the individual expressions. - used_joins |= set(k for k, v in self.alias_refcount.items() if v > pre_joins.get(k, 0)) + used_joins.update(k for k, v in self.alias_refcount.items() if v > pre_joins.get(k, 0)) # For Oracle '' is equivalent to null. The check needs to be done # at this stage because join promotion can't be done at compiler # stage. Using DEFAULT_DB_ALIAS isn't nice, but it is the best we diff --git a/django/test/utils.py b/django/test/utils.py index efd1b49c88..9ba24a3e77 100644 --- a/django/test/utils.py +++ b/django/test/utils.py @@ -7,6 +7,7 @@ import warnings from contextlib import contextmanager from functools import wraps from io import StringIO +from itertools import chain from types import SimpleNamespace from unittest import TestCase, skipIf, skipUnless from xml.dom.minidom import Node, parseString @@ -85,11 +86,7 @@ class ContextList(list): """ Flattened keys of subcontexts. """ - keys = set() - for subcontext in self: - for dict in subcontext: - keys |= set(dict.keys()) - return keys + return set(chain.from_iterable(d for subcontext in self for d in subcontext)) def instrumented_test_render(self, context):