Index: django/newforms/models.py
===================================================================
--- django/newforms/models.py	(revision 5281)
+++ django/newforms/models.py	(working copy)
@@ -169,6 +169,8 @@
             return None
         try:
             value = self.queryset.model._default_manager.get(pk=value)
+            if value not in self.queryset:
+		    raise self.queryset.model.DoesNotExist(gettext(u'Select a valid choice. That choice is not one of the available choices.'))
         except self.queryset.model.DoesNotExist:
             raise ValidationError(gettext(u'Select a valid choice. That choice is not one of the available choices.'))
         return value
Index: django/db/models/fields/related.py
===================================================================
--- django/db/models/fields/related.py	(revision 5281)
+++ django/db/models/fields/related.py	(working copy)
@@ -553,7 +553,12 @@
         setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
 
     def formfield(self, **kwargs):
-        defaults = {'form_class': forms.ModelChoiceField, 'queryset': self.rel.to._default_manager.all()}
+        defaults = {'form_class': forms.ModelChoiceField}
+	if hasattr(self.rel.limit_choices_to, 'get_sql'):
+             defaults['queryset']=self.rel.to._default_manager.filter(self.rel.limit_choices_to)
+	else:
+             defaults['queryset']=self.rel.to._default_manager.filter(**self.rel.limit_choices_to)
+
         defaults.update(kwargs)
         return super(ForeignKey, self).formfield(**defaults)
 
