它显示安装成功。
然后我将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,并且正常运行。我查看了虚拟环境中的站点包,发现:
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
看到它以 'filters' 而不是文档中建议的导入为 (django_filters),我想尝试在 installed_apps 中将其更改为 'filters'。
我停止并重新启动了 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中添加了导入语句。
from donations.filters import DonorFilter
给我同样的`ImportError: No module named django_filters.`错误。
我尝试将filters.py中的导入更改为filters而不是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'
。我可以在我的虚拟环境中安装的filters.py文件中看到FilterSet类。
我注意到django-filter有更多的开发,https://github.com/alex/django-filter页面上的版本更新到了v0.9.2,但是pip只安装了0.1.0。我应该用其他方式来安装它吗(除了pip)?
INSTALLED_APPS
的应用程序'filters',并且在你的.py文件中导入filters
而不是django_filter,会发生什么? - rafaelcINSTALLED_APPS
中添加'filters'并在我的filters.py中导入'filters',那么错误就会消失。我可以访问我的应用程序,但页面上没有过滤器。筛选器的提交按钮是存在的,但其他什么都没有。 - ksi_helpdjango_filter
(注意破折号而不是下划线)。 - Jeremy Weirich