diff options
author | Collin Anderson <cmawebsite@gmail.com> | 2022-04-26 14:15:26 -0400 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-05-03 10:01:45 +0200 |
commit | 3b898ea61ec209ef3ef67e3a6bb55c69bae8c85d (patch) | |
tree | 0fbcc0ce4164f52eba503844ed0aeb34f748a74a /django/db/backends/base/schema.py | |
parent | c5fd5e3cc3d767f5983d44b30df72a29c9c5de83 (diff) | |
download | django-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.py | 15 |
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"), ) |