summaryrefslogtreecommitdiff
path: root/django/db/backends/base/schema.py
diff options
context:
space:
mode:
authorCollin Anderson <cmawebsite@gmail.com>2022-04-26 14:15:26 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-05-03 10:01:45 +0200
commit3b898ea61ec209ef3ef67e3a6bb55c69bae8c85d (patch)
tree0fbcc0ce4164f52eba503844ed0aeb34f748a74a /django/db/backends/base/schema.py
parentc5fd5e3cc3d767f5983d44b30df72a29c9c5de83 (diff)
downloaddjango-3b898ea61ec209ef3ef67e3a6bb55c69bae8c85d.tar.gz
Fixed #29854 -- Made _all_related_fields() return deterministically ordered fields.
Thanks to Rick Yang and Baptiste Mispelon for the investigation.
Diffstat (limited to 'django/db/backends/base/schema.py')
-rw-r--r--django/db/backends/base/schema.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py
index 2a37b13895..468ab42490 100644
--- a/django/db/backends/base/schema.py
+++ b/django/db/backends/base/schema.py
@@ -1,4 +1,5 @@
import logging
+import operator
from datetime import datetime
from django.db.backends.ddl_references import (
@@ -35,11 +36,15 @@ def _is_relevant_relation(relation, altered_field):
def _all_related_fields(model):
- return model._meta._get_fields(
- forward=False,
- reverse=True,
- include_hidden=True,
- include_parents=False,
+ # Related fields must be returned in a deterministic order.
+ return sorted(
+ model._meta._get_fields(
+ forward=False,
+ reverse=True,
+ include_hidden=True,
+ include_parents=False,
+ ),
+ key=operator.attrgetter("name"),
)