Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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)?

I'm very new at this and appreciate any help!

like image 211
ksi_help Avatar asked Apr 28 '15 20:04

ksi_help


Video Answer


2 Answers

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!

like image 145
ksi_help Avatar answered Sep 21 '22 05:09

ksi_help


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.

like image 44
Ayush Vatsyayan Avatar answered Sep 17 '22 05:09

Ayush Vatsyayan