Index: django/newforms/models.py
===================================================================
--- django/newforms/models.py	(revision 7396)
+++ django/newforms/models.py	(working copy)
@@ -7,7 +7,7 @@
 
 from django.utils.translation import ugettext_lazy as _
 from django.utils.encoding import smart_unicode
-from django.utils.datastructures import SortedDict
+from django.utils.datastructures import SortedDict, MultiValueDict
 from django.core.exceptions import ImproperlyConfigured
 
 from util import ValidationError, ErrorList
@@ -254,6 +254,9 @@
             object_data = model_to_dict(instance, opts.fields, opts.exclude)
         # if initial was provided, it should override the values from instance
         if initial is not None:
+            # If initial is an instance of MultiValueDict (or QueryDict), "flatten" it
+            if isinstance(initial, MultiValueDict):
+                initial = dict(initial.items())
             object_data.update(initial)
         BaseForm.__init__(self, data, files, auto_id, prefix, object_data, error_class, label_suffix)
 
Index: tests/modeltests/model_forms/models.py
===================================================================
--- tests/modeltests/model_forms/models.py	(revision 7396)
+++ tests/modeltests/model_forms/models.py	(working copy)
@@ -596,6 +596,15 @@
 <option value="4">Fourth</option>
 </select>  Hold down "Control", or "Command" on a Mac, to select more than one.</li>
 
+Use request data to initialize a form:
+>>> class ArticleForm(ModelForm):
+...     class Meta:
+...         model = Article
+>>> from django.http import QueryDict
+>>> f = ArticleForm(initial=QueryDict('writer=3'))
+>>> f.initial
+{u'writer': u'3'}
+
 # ModelChoiceField ############################################################
 
 >>> from django.newforms import ModelChoiceField, ModelMultipleChoiceField
