Index: django/newforms/models.py
===================================================================
--- django/newforms/models.py	(revision 6426)
+++ django/newforms/models.py	(working copy)
@@ -177,7 +177,7 @@
         if value in ('', None):
             return None
         try:
-            value = self.queryset.model._default_manager.get(pk=value)
+            value = self.queryset.get(pk=value)
         except self.queryset.model.DoesNotExist:
             raise ValidationError(ugettext(u'Select a valid choice. That choice is not one of the available choices.'))
         return value
@@ -200,7 +200,7 @@
         final_values = []
         for val in value:
             try:
-                obj = self.queryset.model._default_manager.get(pk=val)
+                obj = self.queryset.get(pk=val)
             except self.queryset.model.DoesNotExist:
                 raise ValidationError(ugettext(u'Select a valid choice. %s is not one of the available choices.') % val)
             else:
Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 6426)
+++ django/contrib/admin/options.py	(working copy)
@@ -136,7 +136,7 @@
         if self.fieldsets and self.fields:
             raise ImproperlyConfigured('Both fieldsets and fields is specified for %s.' % self.model)
 
-    def formfield_for_dbfield(self, db_field, **kwargs):
+    def formfield_for_dbfield(self, db_field, request, **kwargs):
         """
         Hook for specifying the form Field instance for a given database Field
         instance.
@@ -146,7 +146,9 @@
         # For ManyToManyFields with a filter interface, use a special widget.
         if isinstance(db_field, models.ManyToManyField) and db_field.name in (self.filter_vertical + self.filter_horizontal):
             kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
-            return db_field.formfield(**kwargs)
+            if hasattr(self, 'dynamic_%s_choices' % db_field.name):
+                formfield = db_field.formfield(queryset = getattr(self, 'dynamic_%s_choices' % db_field.name)(request, db_field.rel.to), **kwargs)
+            #return db_field.formfield(**kwargs)
 
         # For DateTimeFields, use a special field and widget.
         if isinstance(db_field, models.DateTimeField):
@@ -166,20 +168,26 @@
 
         # For ForeignKey or ManyToManyFields, use a special widget.
         if isinstance(db_field, (models.ForeignKey, models.ManyToManyField)):
+            if hasattr(self, 'dynamic_%s_choices' % db_field.name): 
+                formfield = db_field.formfield(queryset = getattr(self, 'dynamic_%s_choices' % db_field.name)(request, db_field.rel.to), **kwargs) 
+            else: 
+                formfield = db_field.formfield(**kwargs) 
             if isinstance(db_field, models.ForeignKey) and db_field.name in self.raw_id_fields:
-                kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.rel)
+                formfield.widget = widgets.ForeignKeyRawIdWidget(db_field.rel)
             else:
                 if isinstance(db_field, models.ManyToManyField) and db_field.name in self.raw_id_fields:
-                    kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.rel)
-                    kwargs['help_text'] = ''
+                    formfield.widget = widgets.ManyToManyRawIdWidget(db_field.rel)
+                    formfield.help_text = ''
             # Wrap the widget's render() method with a method that adds
             # extra HTML to the end of the rendered output.
-            formfield = db_field.formfield(**kwargs)
             # Don't wrap raw_id fields. Their add function is in the popup window.
             if not db_field.name in self.raw_id_fields:
                 formfield.widget.render = widgets.RelatedFieldWidgetWrapper(formfield.widget.render, db_field.rel, self.admin_site)
             return formfield
 
+        if isinstance(db_field, (models.OneToOneField)) and hasattr(self, 'dynamic_%s_choices' % db_field.name): 
+            return db_field.formfield(queryset = getattr(self, 'dynamic_%s_choices' % db_field.name)(request, db_field.rel.to), **kwargs)
+        
         # For any other type of field, just call its formfield() method.
         return db_field.formfield(**kwargs)
 
@@ -335,7 +343,8 @@
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
-        return forms.form_for_model(self.model, fields=fields, formfield_callback=self.formfield_for_dbfield)
+        return forms.form_for_model(self.model, fields=fields,
+                                    formfield_callback=lambda f, **kwargs: self.formfield_for_dbfield(f, request, **kwargs))
 
     def form_change(self, request, obj):
         """
@@ -345,7 +354,7 @@
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
-        return forms.form_for_instance(obj, fields=fields, formfield_callback=self.formfield_for_dbfield)
+        return forms.form_for_instance(obj, fields=fields, formfield_callback=lambda f, **kwargs: self.formfield_for_dbfield(f, request, **kwargs))
 
     def save_add(self, request, model, form, formsets, post_url_continue):
         """
@@ -711,7 +720,7 @@
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
-        return forms.inline_formset(self.parent_model, self.model, fk_name=self.fk_name, fields=fields, formfield_callback=self.formfield_for_dbfield, extra=self.extra)
+        return forms.inline_formset(self.parent_model, self.model, fk_name=self.fk_name, fields=fields, formfield_callback=lambda f, **kwargs: self.formfield_for_dbfield(f, request, **kwargs), extra=self.extra)
 
     def formset_change(self, request, obj):
         """Returns an InlineFormSet class for use in admin change views."""
@@ -719,7 +728,7 @@
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
-        return forms.inline_formset(self.parent_model, self.model, fk_name=self.fk_name, fields=fields, formfield_callback=self.formfield_for_dbfield, extra=self.extra)
+        return forms.inline_formset(self.parent_model, self.model, fk_name=self.fk_name, fields=fields, formfield_callback=lambda f, **kwargs: self.formfield_for_dbfield(f, request, **kwargs), extra=self.extra)
 
     def fieldsets_add(self, request):
         if self.declared_fieldsets:
 
