2015-04-28 14 views
14

Używam Django 1.7.1 i PIP zainstalowane Django filtry do mojego wirtualnego env w /.virtualenvs/auction2/lib/python2.7/site-packages$ImportError: nie moduł o nazwie django_filters

Mówi się, że został pomyślnie zainstalowany.

Więc umieszczone Django filtrów zainstalowanych aplikacji tak:

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

wpadłem python manage.py runserver i dostał ten błąd:

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 

Mówi on zainstalowany, ale dlaczego nie można go import to? Mam inny pakiet, chrupiące formularze, zainstalowane i działające. Spojrzałem na mojej stronie pakietów w środowisku wirtualnym i widziałem:

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 

Widząc, że to idzie w jako „filtrów” zamiast co dokumentacja mówi importować go jako (django_filters), pomyślałem, że spróbuję zmieniając go na "filtry" w installed_apps.

ja zatykać i rozpoczął runserver, nie ma problemu, więc zacząłem budowy mój filtr w 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'}) 

zatrzymać i uruchomić runserver, nie ma problemu. Potem rozpocząć dodawanie widok i tylko instrukcję import w views.py:

from donations.filters import DonorFilter 

daje mi ten sam ImportError: No module named django_filters. błąd.

Próbowałem zmienić import w moich filters.py na filtry zamiast django_filters i błędy się nie zmieniły. Zmieniłem wszystko z powrotem na django_filters (w installed_apps i my filters.py), jak mówi dokumentacja, po dodaniu widoku pojawia się błąd global name 'DonorFilter' is not defined. Oto view.py:

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

Oznacza to, że muszę zaimportować funkcję, którą utworzyłem w filters.py? Dlatego dodam from donations.filters import DonorFilter u góry mojego widoku. Następnie błąd jest 'module' object has no attribute 'FilterSet'

widzę klasę FilterSet w pliku filters.py zainstalowanego w moim virtualenv

Zauważyłem, że jest bardziej na rozwój Django filtrem, strona https://github.com/alex/django-filter podchodzi do v0.9.2 , ale pip instaluje 0.1.0. Czy powinienem instalować go w inny sposób (inny niż pip)?

Jestem bardzo nowy i doceniam każdą pomoc!

+0

Ok, jeden krok na raz. Jest tak wiele błędów, że trudno jest odpowiedzieć tylko na One. Po pierwsze, jeśli umieścisz plik settings.py w 'INSTALLED_APPS' aplikacji 'filters', a w twoim .py zaimportujesz' filters' zamiast django_filter, co się stanie? – RafaelC

+0

Dziękuję, wiem, że mam duży bałagan! Jeśli umieściłem "filtry" w 'INSTALLED_APPS' w settings.py i' filtry importu 'w moich filters.py, to błędy zniknęły. Mogę uzyskać dostęp do mojej aplikacji, ale nie ma filtra na stronie. Przycisk przesyłania filtra istnieje, ale nic więcej. –

+0

Do kogoś innego przyklejonego: upewnij się, że nie próbujesz importować 'django-filter' (zwróć uwagę na myślnik zamiast podkreślenia). –

Odpowiedz

25

Moja wersja pip była stara, naprawdę stara. 1.5.6 Kiedy zainstalowałem moje wirtualne środowisko, po prostu zadziałało, więc nie pytałem. Lekcja dowiedziała się! Oto co zrobiłem w przypadku pomaga ktoś inny ...

W środowisku wirtualnym, zainstalowałem pip jak opisano w docs: https://pip.pypa.io/en/stable/installing.html python get-pip.py Ten przenieśli mnie do pip 6.1.1

pip install django-filter 
pip freeze > requirements.txt 

Wymagania dotyczące odczytu.txt pokazał miałem

django-filter==0.9.2 
django-filters==0.1.0 

więc odinstalować starszą wersję z pip uninstall django-filters

powiadomienia z S na starszej wersji, ale nie na nowym jeden

naprawdę podstawowe rzeczy, ale to naprawdę zadziałał mnie w górę. Dziękuję wszystkim, którzy poświęcili czas na zaglądanie w to!

+0

Wow, tym więcej wiesz. 'pip freeze' pozwoli zaoszczędzić mnóstwo czasu w przyszłości, dopóki nie przejdę do Docker. – BastiBen

+1

> Zauważ, że s na starszej wersji, ale nie na nowej Dzięki za to !!! – Timur

2

Miałem podobny problem z Django 1.7, djangorestframework == 3.2.0 i najnowszą == django-Filter 0.13.0:

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

I wreszcie poprawiony przez obniżenie Django filtr do 0,11.

Teraz pip zamrożenie wygląda to i jego pracy:

Django==1.7 
django-filter==0.11.0 
djangorestframework==3.2.0 
1

miałem również ten sam problem. Nawet po zainstalowaniu django-filters nie mogłem go importować

ImportError: No module named django_filters

Wersja Django Używam 1.8 i wersja Pythona jest 2.7.x

Rozwiązanie jest zainstalowanie djangorestframework-filters

pip install djangorestframework-filters 

Nazwy są bardzo mylące.

Jednak django-rest-framework-filters jest rozszerzeniem do struktury Django REST i filtru Django, który ułatwia filtrowanie między relacjami, podczas gdy Django-filter jest aplikacją wielokrotnego użytku Django umożliwiającą użytkownikom deklaratywne dodawanie dynamicznego filtrowania QuerySet z parametrów URL.

Powiązane problemy