def formfield_for_foreignkey(self, db_field, request, **kwargs): if issubclass(remote_model(db_field), MPTTModel) \ and not isinstance(db_field, TreeForeignKey) \ and db_field.name not in self.raw_id_fields: db = kwargs.get('using') limit_choices_to = db_field.get_limit_choices_to() defaults = dict( form_class=TreeNodeChoiceField, queryset=remote_model(db_field)._default_manager.using( db).complex_filter(limit_choices_to), required=False) defaults.update(kwargs) kwargs = defaults return super(MPTTModelAdmin, self).formfield_for_foreignkey( db_field, request, **kwargs)