Вопрос:
Я использую 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. Должен ли я устанавливать его другим способом (кроме пипса)?
Я очень новичок в этом и ценю любую помощь!
Лучший ответ:
Моя версия 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, но не на новую
Действительно, основное, но это действительно сбило меня с толку. Спасибо всем, кто нашел время, чтобы изучить это!
Ответ №1
У меня тоже была такая же проблема. Даже после установки 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.
Ответ №2
У меня была аналогичная проблема с использованием 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 Ответ №3
Я сменил django_filter на django_filters в установленных приложениях, и все было в порядке.
Ответ №4
Я также столкнулся с этой проблемой при установке 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
Надеюсь, это поможет.