web-dev-qa-db-fra.com

ImportError: aucun module nommé Django_filters

J'utilise Django 1.7.1 et j'ai installé des filtres Django sur mon env virtuel à /.virtualenvs/auction2/lib/python2.7/site-packages$

Il a dit qu'il avait été installé avec succès.

J'ai donc placé des filtres Django dans les applications installées comme ceci:

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',
)

Iran python manage.py runserver et a obtenu cette erreur:

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

Il a dit qu'il était installé, mais pourquoi ne peut-il pas l'importer? J'ai un autre paquet, crispy-forms, installé et fonctionnel. J'ai regardé mes packages de site sur l'environnement virtuel et j'ai vu:

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

Voyant qu'il va en tant que "filtres" au lieu de ce que la documentation dit de l'importer en tant que (Django_filters), j'ai pensé que j'essaierais de le changer en "filtres" dans installed_apps.

J'ai arrêté et démarré le runserver, pas de problème, j'ai donc commencé à construire mon filtre dans 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'})

J'arrête et démarre le runserver, pas de problème. Ensuite, je commence à ajouter une vue et juste la déclaration d'importation à views.py:

from donations.filters import DonorFilter

me donne le même ImportError: No module named Django_filters. Erreur.

J'ai essayé de changer l'importation dans mes filters.py en filtres plutôt qu'en Django_filters et les erreurs n'ont pas changé. J'ai tout changé en Django_filters (dans installed_apps et mon filters.py) comme le dit la documentation, j'obtiens l'erreur global name 'DonorFilter' is not defined lorsque j'ajoute la vue. Voici le view.py:

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

Cela signifie que je dois importer la fonction que j'ai créée dans filters.py? J'ajoute donc from donations.filters import DonorFilter en haut de ma vue. L'erreur est alors 'module' object has no attribute 'FilterSet'

Je peux voir la classe FilterSet dans le fichier filters.py installé dans mon virtualenv

J'ai remarqué qu'il y a plus de développement sur Django-filter, la page https://github.com/alex/Django-filter remonte à v0.9.2, mais pip installe 0.1.0. Dois-je l'installer d'une autre manière (autre que pip)?

Je suis très nouveau dans ce domaine et apprécie toute aide!

23
ksi_help

Ma version pip était vieille, vraiment vieille. 1.5.6 Lorsque j'ai installé mon environnement virtuel, cela a juste fonctionné, donc je n'ai pas remis en question. Leçon apprise! Voici ce que j'ai fait au cas où cela aiderait quelqu'un d'autre ...

Dans l'environnement virtuel, j'ai installé pip comme décrit dans la documentation: https://pip.pypa.io/en/stable/installing.htmlpython get-pip.py Cela m'a mis à niveau vers pip 6.1.1

pip install Django-filter
pip freeze > requirements.txt

La lecture de requirements.txt a montré que j'avais

Django-filter==0.9.2
Django-filters==0.1.0

J'ai donc désinstallé l'ancienne version avec pip uninstall Django-filters

remarquez les s sur l'ancienne version mais pas sur la nouvelle

Des trucs vraiment basiques mais ça m'a vraiment fait trébucher. Merci à tous ceux qui ont pris le temps de se pencher là-dessus!

41
ksi_help

J'ai également eu le même problème. Même après l'installation de Django-filters Je n'ai pas pu l'importer

ImportError: aucun module nommé Django_filters

La version Django que j'utilise est 1.8 et python est 2.7.x

Solution est d'installer djangorestframework-filters

pip install djangorestframework-filters

Les noms sont très déroutants.

Toutefois Django-rest-framework-filters est une extension de Django REST et Django filtre qui facilite le filtrage entre les relations tout en Django-filter est une application réutilisable Django permettant aux utilisateurs d'ajouter de manière déclarative un filtrage QuerySet dynamique à partir des paramètres d'URL.

10
Ayush Vatsyayan

J'ai eu un problème similaire en utilisant Django 1.7, djangorestframework == 3.2.0 et le dernier filtre Django == 0.13.0:

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

Je l'ai finalement corrigé en rétrogradant le filtre Django à 0,11.

Maintenant, le gel de pip ressemble à ceci et son fonctionnement:

Django==1.7
Django-filter==0.11.0
djangorestframework==3.2.0
3
Walter B

J'ai changé de Django_filter à Django_filters dans les applications installées et ça allait.

1
Wanjiku Kariuki

J'ai également rencontré ce problème lors de l'installation de Django-filter == 2.2.0

C'était ma Django:

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

settings.py:

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

J'ai installé par erreur avec:

pipenv install Django_filters

C'est l'installation correcte:

pipenv install Django-filter

J'espère que ça aide.

0
andreielizaga