summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/forms/models.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index aa5f6ad795..3d9a795049 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -388,6 +388,24 @@ class BaseModelFormSet(BaseFormSet):
qs = self.queryset
else:
qs = self.model._default_manager.get_query_set()
+
+ # If the queryset isn't already ordered we need to add an
+ # artificial ordering here to make sure that all formsets
+ # constructed from this queryset have the same form order.
+ #
+ # This logic is in the wrong place here on the 1.0.X branch.
+ # In the 1.1 series this logic exists as the QuerySet.ordered
+ # property, but since that's new in 1.1 here in 1.0 we just
+ # have to deal with this slightly smelly code here.
+ if qs.query.extra_order_by or qs.query.order_by:
+ ordered = True
+ elif qs.query.default_ordering and qs.query.model._meta.ordering:
+ ordered = True
+ else:
+ ordered = False
+ if not ordered:
+ qs = qs.order_by(qs.model._meta.pk.name)
+
if self.max_num > 0:
self._queryset = qs[:self.max_num]
else: