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!
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!
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.
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
J'ai changé de Django_filter
à Django_filters
dans les applications installées et ça allait.
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.