Author: jezdez
Date: 2011-04-22 05:01:33 -0700 (Fri, 22 Apr 2011)
New Revision: 16063

Modified:
   django/trunk/django/forms/models.py
   django/trunk/tests/modeltests/model_forms/models.py
Log:
Fixed #6953 -- Correctly sort ManyToMany fields in ModelForms. Thanks, 
dgouldin, mk and Alex.

Modified: django/trunk/django/forms/models.py
===================================================================
--- django/trunk/django/forms/models.py 2011-04-21 17:43:22 UTC (rev 16062)
+++ django/trunk/django/forms/models.py 2011-04-22 12:01:33 UTC (rev 16063)
@@ -143,7 +143,7 @@
     field_list = []
     ignored = []
     opts = model._meta
-    for f in opts.fields + opts.many_to_many:
+    for f in sorted(opts.fields + opts.many_to_many):
         if not f.editable:
             continue
         if fields is not None and not f.name in fields:

Modified: django/trunk/tests/modeltests/model_forms/models.py
===================================================================
--- django/trunk/tests/modeltests/model_forms/models.py 2011-04-21 17:43:22 UTC 
(rev 16062)
+++ django/trunk/tests/modeltests/model_forms/models.py 2011-04-22 12:01:33 UTC 
(rev 16063)
@@ -371,7 +371,7 @@
 OddForm is now an Article-related thing, because BadForm.Meta overrides
 CategoryForm.Meta.
 >>> OddForm.base_fields.keys()
-['headline', 'slug', 'pub_date', 'writer', 'article', 'status', 'categories']
+['headline', 'slug', 'pub_date', 'writer', 'article', 'categories', 'status']
 
 >>> class ArticleForm(ModelForm):
 ...     class Meta:
@@ -382,7 +382,7 @@
 >>> class BadForm(ArticleForm, CategoryForm):
 ...     pass
 >>> OddForm.base_fields.keys()
-['headline', 'slug', 'pub_date', 'writer', 'article', 'status', 'categories']
+['headline', 'slug', 'pub_date', 'writer', 'article', 'categories', 'status']
 
 Subclassing without specifying a Meta on the class will use the parent's Meta
 (or the first parent in the MRO if there are multiple parent classes).
@@ -556,17 +556,17 @@
 <option value="...">Mike Royko</option>
 </select></td></tr>
 <tr><th>Article:</th><td><textarea rows="10" cols="40" 
name="article"></textarea></td></tr>
+<tr><th>Categories:</th><td><select multiple="multiple" name="categories">
+<option value="...">Entertainment</option>
+<option value="...">It&#39;s a test</option>
+<option value="...">Third test</option>
+</select><br /><span class="helptext"> Hold down "Control", or "Command" on a 
Mac, to select more than one.</span></td></tr>
 <tr><th>Status:</th><td><select name="status">
 <option value="" selected="selected">---------</option>
 <option value="1">Draft</option>
 <option value="2">Pending</option>
 <option value="3">Live</option>
 </select></td></tr>
-<tr><th>Categories:</th><td><select multiple="multiple" name="categories">
-<option value="...">Entertainment</option>
-<option value="...">It&#39;s a test</option>
-<option value="...">Third test</option>
-</select><br /><span class="helptext"> Hold down "Control", or "Command" on a 
Mac, to select more than one.</span></td></tr>
 
 You can restrict a form to a subset of the complete list of fields
 by providing a 'fields' argument. If you try to save a
@@ -612,17 +612,17 @@
 <option value="..." selected="selected">Mike Royko</option>
 </select></li>
 <li>Article: <textarea rows="10" cols="40" 
name="article">Hello.</textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="...">Entertainment</option>
+<option value="...">It&#39;s a test</option>
+<option value="...">Third test</option>
+</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 <li>Status: <select name="status">
 <option value="" selected="selected">---------</option>
 <option value="1">Draft</option>
 <option value="2">Pending</option>
 <option value="3">Live</option>
 </select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="...">Entertainment</option>
-<option value="...">It&#39;s a test</option>
-<option value="...">Third test</option>
-</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 >>> f = TestArticleForm({'headline': u'Test headline', 'slug': 
 >>> 'test-headline', 'pub_date': u'1984-02-06', 'writer': unicode(w_royko.pk), 
 >>> 'article': 'Hello.'}, instance=art)
 >>> f.errors
 {}
@@ -675,17 +675,17 @@
 <option value="..." selected="selected">Mike Royko</option>
 </select></li>
 <li>Article: <textarea rows="10" cols="40" 
name="article">Hello.</textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="..." selected="selected">Entertainment</option>
+<option value="...">It&#39;s a test</option>
+<option value="...">Third test</option>
+</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 <li>Status: <select name="status">
 <option value="" selected="selected">---------</option>
 <option value="1">Draft</option>
 <option value="2">Pending</option>
 <option value="3">Live</option>
 </select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="..." selected="selected">Entertainment</option>
-<option value="...">It&#39;s a test</option>
-<option value="...">Third test</option>
-</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 
 Initial values can be provided for model forms
 >>> f = TestArticleForm(auto_id=False, initial={'headline': 'Your headline 
 >>> here', 'categories': [str(c1.id), str(c2.id)]})
@@ -699,17 +699,17 @@
 <option value="...">Mike Royko</option>
 </select></li>
 <li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="..." selected="selected">Entertainment</option>
+<option value="..." selected="selected">It&#39;s a test</option>
+<option value="...">Third test</option>
+</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 <li>Status: <select name="status">
 <option value="" selected="selected">---------</option>
 <option value="1">Draft</option>
 <option value="2">Pending</option>
 <option value="3">Live</option>
 </select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="..." selected="selected">Entertainment</option>
-<option value="..." selected="selected">It&#39;s a test</option>
-<option value="...">Third test</option>
-</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 
 >>> f = TestArticleForm({'headline': u'New headline', 'slug': u'new-headline', 
 >>> 'pub_date': u'1988-01-04',
 ...     'writer': unicode(w_royko.pk), 'article': u'Hello.', 'categories': 
[unicode(c1.id), unicode(c2.id)]}, instance=new_art)
@@ -818,17 +818,17 @@
 <option value="...">Mike Royko</option>
 </select></li>
 <li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="...">Entertainment</option>
+<option value="...">It&#39;s a test</option>
+<option value="...">Third</option>
+</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 <li>Status: <select name="status">
 <option value="" selected="selected">---------</option>
 <option value="1">Draft</option>
 <option value="2">Pending</option>
 <option value="3">Live</option>
 </select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="...">Entertainment</option>
-<option value="...">It&#39;s a test</option>
-<option value="...">Third</option>
-</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 >>> c4 = Category.objects.create(name='Fourth', url='4th')
 >>> c4
 <Category: Fourth>
@@ -845,18 +845,18 @@
 <option value="...">Mike Royko</option>
 </select></li>
 <li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="...">Entertainment</option>
+<option value="...">It&#39;s a test</option>
+<option value="...">Third</option>
+<option value="...">Fourth</option>
+</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 <li>Status: <select name="status">
 <option value="" selected="selected">---------</option>
 <option value="1">Draft</option>
 <option value="2">Pending</option>
 <option value="3">Live</option>
 </select></li>
-<li>Categories: <select multiple="multiple" name="categories">
-<option value="...">Entertainment</option>
-<option value="...">It&#39;s a test</option>
-<option value="...">Third</option>
-<option value="...">Fourth</option>
-</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, 
to select more than one.</span></li>
 
 # ModelChoiceField ############################################################
 

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to