ImportError: нет модуля с именем django_filters
Я использую Django 1.7.1, а я pip установил django-фильтры для своего виртуального env в /.virtualenvs/auction2/lib/python2.7/site-packages$
Он сказал, что он был успешно установлен.
Итак, я разместил django-фильтры в установленных приложениях так:
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',
)
Я запустил python manage.py runserver
и получил эту ошибку:
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
Он сказал, что он установлен, но почему он не может его импортировать? У меня есть еще один пакет, хрустящие формы, установленные и работающие. Я просмотрел пакеты своего сайта в виртуальной среде, и я увидел:
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
Увидев, что он используется как "фильтры" вместо того, что говорит в документации, чтобы импортировать его как (django_filters), я подумал, что попробую изменить его на "фильтры" в файле installed_apps.
Я остановился и начал работать с сервером без проблем, поэтому начал создавать свой фильтр в 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'})
Я останавливаюсь и запускаю сервер, без проблем. Затем я начинаю добавлять представление и просто оператор import в views.py:
from donations.filters import DonorFilter
дает мне ту же ошибку ImportError: No module named django_filters.
.
Я попытался изменить импорт в моих фильтрах filter.py на фильтры, а не на django_filters, и ошибки не изменились. Я изменил все на django_filters (в файлах installed_apps и my filters.py), как говорит документация, я получаю сообщение об ошибке global name 'DonorFilter' is not defined
при добавлении представления. Вот view.py:
def donor_list(request):
f = DonorFilter(request.GET, queryset=Donor.objects.all())
return render_to_response('donations/donor_list', {'filter': f})
Это означает, что мне нужно импортировать функцию, созданную в filters.py? Поэтому я добавляю
from donations.filters import DonorFilter
в верхней части моего представления.
Тогда ошибка 'module' object has no attribute 'FilterSet'
Я вижу класс FilterSet в файле filters.py, установленном в моем virtualenv
Я заметил, что на django-фильтре больше возможностей, страница https://github.com/alex/django-filter поднимается до v0.9.2, но pip устанавливает 0.1. 0. Должен ли я устанавливать его другим способом (кроме пипса)?
Я очень новичок в этом и ценю любую помощь!
Ответы
Ответ 1
Моя версия pip была старой, действительно старой. 1.5.6 Когда я установил свою виртуальную среду, она просто сработала, поэтому я не стал сомневаться. Урок выучен! Вот что я сделал, если он помогает кому-то еще...
В виртуальной среде я установил pip, как описано в документах:
https://pip.pypa.io/en/stable/installing.html
python get-pip.py
Это улучшило меня до пункта 6.1.1
pip install django-filter
pip freeze > requirements.txt
Чтение требований .txt показало, что у меня был
django-filter==0.9.2
django-filters==0.1.0
Итак, я удалил старую версию с помощью pip uninstall django-filters
обратите внимание на старшую версию s, но не на новую
Действительно, основное, но это действительно сбило меня с толку. Спасибо всем, кто нашел время, чтобы изучить это!
Ответ 2
У меня тоже была такая же проблема. Даже после установки django-filters
я не смог импортировать его
ImportError: нет модуля с именем django_filters
Версия Django, используемая мной, - 1,8, а версия python - 2.7.x
Решение заключается в установке djangorestframework-filters
pip install djangorestframework-filters
Имена очень сбивают с толку.
Однако django-rest-framework-filters
является расширением к структуре Django REST и фильтру Django, что позволяет легко фильтровать отношения, а Django-filter
- это многозадачное приложение Django, позволяющее пользователям декларативно добавлять динамическую фильтрацию QuerySet из параметров URL.
Ответ 3
У меня была аналогичная проблема с использованием django 1.7, djangorestframework == 3.2.0 и последнего django-фильтра == 0.13.0:
Using DjangoFilterBackend, but django-filter is not installed
cannot import name Expression
Я, наконец, исправил его, понизив django-filter до 0,11.
Теперь стирание затвора выглядит так и работает:
Django==1.7
django-filter==0.11.0
djangorestframework==3.2.0
Ответ 4
Я сменил django_filter
на django_filters
в установленных приложениях, и все было в порядке.
Ответ 5
Я также столкнулся с этой проблемой при установке django-filter == 2.2.0
Это была моя версия Django:
Django [required: >=1.11, installed: 2.2]
settings.py:
INSTALLED_APPS = [
# ...
'django_filters',
]
Я по ошибке установил:
pipenv install django_filters
Это правильная установка:
pipenv install django-filter
Надеюсь, это поможет.