Index: django/db/models/fields/related.py
===================================================================
--- django/db/models/fields/related.py	(revision 5933)
+++ django/db/models/fields/related.py	(working copy)
@@ -552,7 +552,7 @@
         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, 'queryset': self.rel.to._default_manager.complex_filter(self.rel.limit_choices_to or {})}
         defaults.update(kwargs)
         return super(ForeignKey, self).formfield(**defaults)
 
@@ -628,7 +628,7 @@
             cls._meta.one_to_one_field = self
 
     def formfield(self, **kwargs):
-        defaults = {'form_class': forms.ModelChoiceField, 'queryset': self.rel.to._default_manager.all()}
+        defaults = {'form_class': forms.ModelChoiceField, 'queryset': self.rel.to._default_manager.complex_filter(self.rel.limit_choices_to or {})}
         defaults.update(kwargs)
         return super(OneToOneField, self).formfield(**defaults)
 
@@ -760,7 +760,7 @@
         setattr(instance, self.attname, data)
         
     def formfield(self, **kwargs):
-        defaults = {'form_class': forms.ModelMultipleChoiceField, 'queryset': self.rel.to._default_manager.all()}
+        defaults = {'form_class': forms.ModelMultipleChoiceField, 'queryset': self.rel.to._default_manager.complex_filter(self.rel.limit_choices_to or {})}
         defaults.update(kwargs)
         # If initial is passed in, it's a list of related objects, but the
         # MultipleChoiceField takes a list of IDs.
