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

Надеюсь, это поможет.