2015-04-28 24 views
14

Tôi đang sử dụng Django 1.7.1 và tôi pip cài đặt django-bộ lọc để env ảo của tôi tại /.virtualenvs/auction2/lib/python2.7/site-packages$ImportError: Không có mô-đun tên django_filters

Nó nói nó đã được cài đặt thành công.

Vì vậy, tôi đặt django-bộ lọc trong các ứng dụng được cài đặt như sau:

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

Tôi chạy python manage.py runserver và đã nhận lỗi này:

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 

Nó nói nó được cài đặt, nhưng tại sao không thể nó nhập khẩu nó? Tôi có một gói khác, dạng giòn, được cài đặt và hoạt động. Tôi nhìn gói trang web của tôi trên môi trường ảo và tôi thấy:

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 

Thấy nó đi trong khi 'lọc' thay vì những gì các tài liệu nói để nhập nó như (django_filters), tôi nghĩ rằng tôi muốn thử thay đổi nó thành 'bộ lọc' trong tệp installed_apps.

tôi ngừng và bắt đầu runserver, không có vấn đề, vì vậy tôi bắt đầu xây dựng bộ lọc của tôi trong 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'}) 

Tôi dừng lại và bắt đầu runserver, không có vấn đề. Sau đó, tôi bắt đầu thêm một cái nhìn và chỉ báo cáo kết quả nhập khẩu tại views.py:

from donations.filters import DonorFilter 

mang lại cho tôi cùng một lỗi ImportError: No module named django_filters..

Tôi đã thử thay đổi quá trình nhập trong filter.py thành bộ lọc thay vì django_filters và các lỗi không thay đổi. Tôi đã thay đổi tất cả mọi thứ trở lại django_filters (trong installed_apps và filters.py của tôi) như tài liệu nói để làm, tôi nhận được lỗi global name 'DonorFilter' is not defined khi tôi thêm chế độ xem. Đây là view.py:

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

Điều đó có nghĩa là tôi cần nhập hàm tôi đã tạo trong filters.py? Vì vậy, tôi thêm from donations.filters import DonorFilter vào đầu chế độ xem của tôi. Sau đó, lỗi là 'module' object has no attribute 'FilterSet'

tôi có thể thấy lớp FilterSet trong file filters.py cài đặt trong virtualenv tôi

tôi nhận thấy có sự phát triển thêm về django-lọc, trang https://github.com/alex/django-filter đi lên v0.9.2 , nhưng pip cài đặt 0.1.0. Tôi có nên cài đặt nó theo cách khác (ngoài pip) không?

Tôi rất mới ở đây và đánh giá cao bất kỳ trợ giúp nào!

+0

Ok, mỗi lần một bước. Có rất nhiều lỗi rất khó để trả lời chỉ một. Trước hết, nếu bạn đặt trong settings.py của bạn trong 'INSTALLED_APPS' ứng dụng 'bộ lọc' và trong của bạn .py bạn nhập' bộ lọc' thay vì django_filter, những gì sẽ xảy ra? – RafaelC

+0

Cảm ơn bạn, tôi biết tôi có một mớ hỗn độn lớn! Nếu tôi đặt 'các bộ lọc' trong 'INSTALLED_APPS' trong settings.py và' các bộ lọc nhập 'trong bộ lọc của tôi thì các lỗi đã biến mất. Tôi có thể truy cập ứng dụng của mình nhưng không có bộ lọc nào trên trang. Nút gửi cho bộ lọc là có, nhưng không có gì khác. –

+0

Để bất cứ ai khác bị mắc kẹt trên này: hãy chắc chắn rằng bạn không cố gắng để nhập khẩu 'django-filter' (thông báo dấu gạch ngang chứ không phải là gạch dưới). –

Trả lời

25

Phiên bản pip của tôi cũ, thực sự cũ. 1.5.6 Khi tôi cài đặt môi trường ảo của mình, nó chỉ hoạt động, vì vậy tôi không hỏi. Bài học kinh nghiệm! Dưới đây là những gì tôi đã làm trong trường hợp nó sẽ giúp người khác ...

Trong môi trường ảo, tôi cài đặt pip như mô tả trong các tài liệu: https://pip.pypa.io/en/stable/installing.html python get-pip.py này nâng cấp tôi để pip 6.1.1

pip install django-filter 
pip freeze > requirements.txt 

Yêu cầu đọc.txt cho thấy tôi đã

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

Vì vậy, tôi gỡ bỏ phiên bản cũ hơn với pip uninstall django-filters

thông báo các s trên phiên bản cũ nhưng không phải trên một

thứ Thật cơ bản mới, nhưng nó thực sự vấp tôi lên. Cảm ơn bất cứ ai đã dành thời gian để xem xét điều này!

+0

Chà, bạn càng biết nhiều. 'pip freeze' sẽ tiết kiệm rất nhiều thời gian cho tôi trong tương lai cho đến khi tôi chuyển sang Docker. – BastiBen

+1

> thông báo về các phiên bản cũ hơn nhưng không phải trên phiên bản mới Cảm ơn vì điều này !!! – Timur

2

Tôi đã có một vấn đề tương tự sử dụng django 1,7, djangorestframework == 3.2.0 và mới nhất == django lọc 0.13.0:

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

Cuối cùng tôi cố định nó bằng cách hạ thấp django lọc để 0.11.

đóng băng Bây giờ pip trông như thế này và làm việc của nó:

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

Tôi cũng có cùng một vấn đề. Ngay cả sau khi cài đặt django-filters tôi không thể import nó

ImportError: No module named django_filters

Phiên bản Django Tôi đang sử dụng là 1.8 và phiên bản python là 2.7.x

Giải pháp là cài đặt djangorestframework-filters

pip install djangorestframework-filters 

Các tên rất khó hiểu.

Tuy nhiên django-rest-framework-filters là phần mở rộng của khung công tác Django REST và bộ lọc Django giúp dễ dàng lọc qua các mối quan hệ trong khi Django-filter là ứng dụng Django có thể tái sử dụng cho phép người dùng thêm lọc QuerySet động từ tham số URL.

Các vấn đề liên quan