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 | |
| parent | c5fd5e3cc3d767f5983d44b30df72a29c9c5de83 (diff) | |
Fixed #29854 -- Made _all_related_fields() return deterministically ordered fields.
Thanks to Rick Yang and Baptiste Mispelon for the investigation.
| -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"), ) |
