我正在尝试使用Django包:Django Filter 我通过Pip安装它,确保我运行支持的Python(3.6)版本和Django(2.0),但每当我尝试运行我的应用程序时,我都会收到以下错误:
class Table1(models.Model, django_filters.FilterSet):
NameError: name 'django_filters' is not defined
这是我的代码示例,更改了名称以保护我的工作。
models.py:
from django.db import models
from django.contrib.postgres.search import SearchVectorField, SearchQuery
from django_filters import FilterSet
class Table1(models.Model, django_filters.FilterSet):
field1 = models.IntegerField(db_column='field1', blank=True, null=True)
field2 = models.NullBooleanField(db_column='field2')
field3= models.IntegerField(db_column='field3', blank=True, null=True)
field4= models.TextField(db_column='field4', blank=True, null=False, primary_key=True)
#def __str__(self):
# return self.sid
class Meta:
managed = False
db_table = 'Table1'
unique_together = (('field1', 'field2', 'field3', 'field4'),)
filters.py:
from .models import Table1
import django_filters
class Table1Filter(django_filters.FilterSet):
class Meta:
model = Table1
fields = ['field1', 'field2', 'field3', 'field4']
views.py:
from django.shortcuts import render
from django_tables2 import RequestConfig
from django_tables2.export.export import TableExport
from django.contrib.postgres.search import SearchQuery, SearchRank
from django.template import RequestContext
from django.views.generic import *
from .models import *
from .tables import *
from .forms import *
from .filters import Table1Filter
def table1(request):
filter = Table1Filter(request.GET, queryset=Table1.objects.all())
return render(request, 'table1.html', {'filter': filter})
我手动编写了一些基本的过滤内容然后意识到Django过滤器是一件事,并认为我不应该重新发明轮子。这样做的目的是显示来自现有数据库的数据,并允许最终用户对其进行过滤。如果有更好的方法可以做到这一点,我全都听见了。感谢您的投入,并花时间阅读本文!
答案 0 :(得分:0)
也许是因为您还没有在models.py文件中导入django_filters
。
import django_filters # instead of django_filters import FilterSet
或反过来使用它。
答案 1 :(得分:0)
您的问题可能是循环导入......
在models.py中导入from django_filters import FilterSet
,然后导入fitlers.py
其中一个模型models.py
,同时django_filters
。
这可能会导致问题。我想你不需要在models.py
中导入那个库和FilterSet