ksi_help
ksi_help

Reputation: 1692

ImportError: No module named django_filters

I am using Django 1.7.1 and I pip installed django-filters to my virtual env at /.virtualenvs/auction2/lib/python2.7/site-packages$

It said it was installed successfully.

So I placed django-filters in installed apps like so:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
    'django_filters',
    'donations',
)

I ran python manage.py runserver and got this error:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/apps/config.py", line 87, in create
    module = import_module(entry)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named django_filters

It said it installed, but why can't it import it? I have another package, crispy-forms, installed and working. I looked at my site packages on the virtual environment and I saw:

crispy_forms
django
django_braces-1.4.0.dist-info
django_crispy_forms-1.4.0-py2.7.egg-info
django_filters-0.1.0-py2.7.egg-info
easy_install.py
easy_install.pyc
filters
pip

Seeing that it goes in as 'filters' instead of what the documentation says to import it as (django_filters), I thought I'd try changing it to just 'filters' in installed_apps.

I stoped and started the runserver, no problem, so I began building my filter in filter.py:

import django_filters
from donations.models import Donor, Item, Issue

class DonorFilter(django_filters.FilterSet):
    class Meta:
        model = Donor
        fields = {'type':['exact'],'donor':['icontains'],}

        def __init__(self, *args, **kwargs):
            super(DonorFilter, self).__init__(*args, **kwargs)
            self.filters['type'].extra.update(
                {'empty_label': 'All Types'})

I stop and start the runserver, no problem. Then I start adding a view and just the import statement at views.py:

from donations.filters import DonorFilter

gives me the same ImportError: No module named django_filters. error.

I tried changing the import in my filters.py to filters rather than django_filters and the errors didn't change. I changed everything back to django_filters (in installed_apps and my filters.py) as the documentation says to do, I get the error global name 'DonorFilter' is not defined when I add the view. Here is the view.py:

def donor_list(request):
    f = DonorFilter(request.GET, queryset=Donor.objects.all())
    return render_to_response('donations/donor_list', {'filter': f})

That means I need to import the function I created in filters.py? So I add from donations.filters import DonorFilter to the top of my view. Then the error is 'module' object has no attribute 'FilterSet'

I can see the FilterSet class in the filters.py file installed in my virtualenv

I noticed there is more development on django-filter, the https://github.com/alex/django-filter page goes up to v0.9.2, but pip installs 0.1.0. Should I be installing it another way (other than pip)?

Upvotes: 52

Views: 114802

Answers (11)

andrei1111
andrei1111

Reputation: 454

I also encountered this issue installing django-filter==2.2.0

This was my Django version:

Django [required: >=1.11, installed: 2.2]

settings.py:

INSTALLED_APPS = [
    # ...
    'django_filter',
]

This is the correct installation:

pipenv install django-filter

Upvotes: 12

Swarnabha Das
Swarnabha Das

Reputation: 37

Ensure its django_filters and not django-filters in settings.py. Also keep in find it's not django-filter, it's django-filters. But to install it:

pip install django-filter

Upvotes: 0

Jojo Bonnie
Jojo Bonnie

Reputation: 21

I tried all of the above answers and none of them worked for me. I later learnt that the pip script is not installing modules for the interpreter that the python command is using.

SOLUTION:

python -m pip install django-filter

Upvotes: 2

David Mutuku
David Mutuku

Reputation: 13

I also experienced the same problem but i realized its because i had installed django-filter when am in the virtual environment. I tried installing django-filter at the same directory without activating the virtual environment and it worked

I used

pip install django-filter

Upvotes: 0

Farhan Saikh
Farhan Saikh

Reputation: 111

enter image description here In my case, the issue was Interpreter, After wasting a day finally resolved the issue. Always check you are selecting the right Interpreter. I was getting this error before fixing the issue:
"django_filters" is not accessedPylance Import "django_filters" could not be resolvedPylancereportMissingImports Though I see requirment.txt showing django_filters 23.1

Upvotes: 0

barna
barna

Reputation: 171

We install it using: pip install django-filter or in case you are using a virtual environment like pipenv, use pipenv install django-filter .

the above install, adds the latest version of django-filter. Add "==version" to specify the version ( say 0.11.0) you need

In the settings.py under app, ensure it's 'django_filters',

INSTALLED_APPS = [
    # ...
    'django_filters',
]

Upvotes: 1

Prafull Epili
Prafull Epili

Reputation: 9

I removed django_filters in the settings INSTALLED_APPS. this is worked for me

Upvotes: 0

Wanjiku K
Wanjiku K

Reputation: 55

I changed from django_filter to django_filters in installed apps and it was okay.

Upvotes: 4

Ayush Vatsyayan
Ayush Vatsyayan

Reputation: 2616

I also had the same issue. Even after installing django-filters I couldn't import it

ImportError: No module named django_filters

The Django version I'm using is 1.8 and python version is 2.7.x

Solution is to install djangorestframework-filters

pip install djangorestframework-filters

The names are very confusing.

However django-rest-framework-filters is an extension to Django REST framework and Django filter that makes it easy to filter across relationships while Django-filter is a reusable Django application allowing users to declaratively add dynamic QuerySet filtering from URL parameters.

Upvotes: 13

Walter B
Walter B

Reputation: 735

I had a similar issue using django 1.7, djangorestframework==3.2.0 and latest django-filter==0.13.0:

Using DjangoFilterBackend, but django-filter is not installed
cannot import name Expression

I finally fixed it by downgrading django-filter to 0.11.

Now pip freeze looks like this and its working:

Django==1.7
django-filter==0.11.0
djangorestframework==3.2.0

Upvotes: 3

ksi_help
ksi_help

Reputation: 1692

My pip version was old, really old. 1.5.6 When I installed my virtual environment it just worked, so I didn't question. Lesson learned! Here is what I did in case it helps someone else...

In the virtual environment, I installed pip as described in the docs: https://pip.pypa.io/en/stable/installing.html python get-pip.py This upgraded me to pip 6.1.1

pip install django-filter
pip freeze > requirements.txt

Reading requirements.txt showed I had

django-filter==0.9.2
django-filters==0.1.0

So I uninstalled the older version with pip uninstall django-filters

notice the s on the older version but not on the new one

Really basic stuff but it really tripped me up. Thanks to anyone who took time to look into this!

Upvotes: 77

Related Questions