【问题标题】:NameError: name 'django_filters' is not definedNameError:名称'django_filters'未定义
【发布时间】:2018-08-24 20:55:23
【问题描述】:

我正在尝试使用 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 过滤器是一个东西,并认为我不应该重新发明轮子。这样做的目的是显示现有数据库中的数据并允许最终用户对其进行过滤。如果有更好的方法可以做到这一点,我会全力以赴。感谢您的意见,并花时间阅读本文!

【问题讨论】:

    标签: django database python-3.x postgresql django-filter


    【解决方案1】:

    您的问题可能在于循环导入...

    在 models.py 中导入 from django_filters import FilterSet,然后从 models.py 导入 fitlers.py 模型之一,同时导入 django_filters

    这可能会导致问题。我猜你不需要在你的models.py中导入那个库和FilterSet

    【讨论】:

      【解决方案2】:

      可能是因为你没有在你的 models.py 文件中导入django_filters

      import django_filters # instead of django_filters import FilterSet
      

      或者反过来使用它。

      【讨论】:

      • 我试过这个,得到一个不同的错误,不知道如何只导入整个包来解决这个问题......新错误:TypeError:元类冲突:派生类的元类必须是(非严格)其所有基类的元类的子类
      • @J.Sax 在您的 models.py 文件中,您导入的是 FilterSet 而不是模块 django_filters。没关系,但是在下一行,你有类似class Msysaces1(models.Model, django_filters.FilterSet): 的东西,现在显然这是一个错误,因为没有导入 django_filters。您需要导入 django_filters 或更改行。
      • 我明白你在说什么,但这是不对的。我正在为“模型”进行类似的导入并在课堂上使用它,没有错误。同样,我已经尝试了您的建议,并得到了一个不同的错误,这包含在我之前的评论中。
      • @J.Sax 这是一个全新的不同问题,models.Modeldjango_filters.FilterSet 具有不同的元类,但这并不意味着您的导入不正确。您可能需要阅读有关 Python 导入的信息才能理解它们。顺便说一句,我认为从FilterSet继承模型不是一个好主意。
      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 2021-04-15
      • 2019-01-26
      • 2021-10-05
      • 2017-08-16
      • 2019-08-18
      相关资源
      最近更新 更多