我正在使用Django 1.7.1,并将已安装的django-filters添加到/.virtualenvs/auction2/lib/python2.7/site-packages$
它说已成功安装。
所以我将django-filters放在已安装的应用程序中,如下所示:
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),我想我会尝试将它更改为只在instal_apps中的'过滤器'。
我停止并启动了runserver,没问题,所以我开始在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'})
我停下来启动runserver,没问题。然后我开始在views.py:
添加一个视图和import语句from donations.filters import DonorFilter
给了我同样的ImportError: No module named django_filters.
错误。
我尝试将filters.py中的导入更改为过滤器而不是django_filters,但错误没有改变。我将所有内容更改回django_filters(在installed_apps和我的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'
我可以在virtualenv
中安装的filters.py文件中看到FilterSet类我注意到django-filter有更多的开发,https://github.com/alex/django-filter页面达到v0.9.2,但是pip安装0.1.0。我应该以另一种方式安装它(除了点子)吗?
我对此非常陌生并感谢任何帮助!
答案 0 :(得分:36)
我的pip版本很旧,很旧。 1.5.6当我安装我的虚拟环境时,它只是工作,所以我没有提问。学过的知识!以下是我帮助别人的事情......
在虚拟环境中,我按照文档中的描述安装了pip:
https://pip.pypa.io/en/stable/installing.html
python get-pip.py
这使我升级为pip 6.1.1
pip install django-filter
pip freeze > requirements.txt
阅读requirements.txt显示我有
django-filter==0.9.2
django-filters==0.1.0
所以我用pip uninstall django-filters
注意旧版本上的s,但不注意新版本
真的是基本的东西,但它真的让我失望了。感谢任何花时间研究这个的人!
答案 1 :(得分:10)
我也有同样的问题。即使安装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应用程序,允许用户以声明方式从URL参数添加动态QuerySet过滤。
答案 2 :(得分:3)
我有一个类似的问题,使用django 1.7,djangorestframework == 3.2.0和最新的django-filter == 0.13.0:
Using DjangoFilterBackend, but django-filter is not installed
cannot import name Expression
我最后通过将django-filter降级到0.11来修复它。
现在pip冻结看起来像这样,它的工作原理:
Django==1.7
django-filter==0.11.0
djangorestframework==3.2.0
答案 3 :(得分:2)
我在安装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
希望有帮助。
答案 4 :(得分:0)
在已安装的应用中,我从django_filter
更改为django_filters
,没关系。
答案 5 :(得分:0)
确保 settings.py 中的 django_filters 而不是 django-filters。还要保持找到它不是django-filter,它的django-filters。
但是要安装它:
pip install django-filter
答案 6 :(得分:0)
我在设置 django_filters
中删除了 INSTALLED_APPS
。这对我有用