Django:django-tables2分页和过滤

Django:django-tables2分页和过滤,第1张

Django:django-tables2分页和过滤

您正在使用哪个版本的django_tables2?我检查了源代码,发现django_tables2使用的模板标签名为

querystring
用于在
table.html
模板中创建分页链接。该
querystring
标签
更新 与寻呼参数的URL。所以django_tables2支持分页+开箱即用的过滤(这是我记得的)。

请尝试更新到django_tables2的最新版本,并确保您使用的是默认

table.html
模板来呈现表。

您是否还在使用GET或POST提交过滤器表单?请确保使用GET提交!

最后,请看看我对这个问题的回答Django Tables-Column
Filtering

更新:
我仔细查看了您发布的代码:首先,您正在将发布数据传递到过滤器:您不能为此使用POST,POST仅应用于修改数据的 *** 作。我还看到您不过滤任何内容,而是将.all()传递给表!实际的过滤在哪里进行?您应该按照上面答案中的描述将过滤后的数据传递给表!

更新2:
视图的问题是,当您第一次访问该页面时,该

GET
词典不包含该
my_choice
属性,因此在尝试
my_choice
通过
[]
运算符访问该属性时它将抛出异常,因此您应该使用以下命令检查它是否确实存在例如
.get()
,如下所示:

my_filter = TestFilter(request.GET)my_choice = my_filter.data.get('my_choice') # This won't throw an exceptionif my_choice: # If my_choice existed on the GET dictionary this will return non-null value    table = TestTable(TestObj.objects.filter(choice=my_choice), order_by="-my_date")else:    table = TestTable(TestObj.objects.all(), order_by="-my_date")RequestConfig(request, paginate={"per_page": 10}).configure(table)return render(request, 'test_app/index.html', {'table': table, 'my_filter': my_filter})

上面的方法应该可以工作,但是通过自己对查询集进行过滤- 您几乎违反了所有
django设计哲学!

这就是为什么我告诉您阅读我对类似问题(Django Tables-Column
Filtering)的其他答案的原因,在该问题中,我建议使用django-filter,这是一个明确用于过滤查询集的软件包。请检查文档或我的答案以查看其用法(如果您有任何疑问,我们将很乐意为您提供帮助)。

此外,您的代码还有许多其他小问题:

  • 你并不需要检查,如果

    request.method
    GET
    -它总是会
    GET
    因为你不会做任何
    POST
    小号

  • 您不应该将其包括

    {{ csrf_token }}
    在模板中-仅用于
    POST

  • TestFilter
    类实际上是一个
    Form
    ,这就是为什么我建议将其命名
    TestFilterForm
    或类似的东西-如果您想使用Django的过滤器,那么你会创建一个
    FilterSet
    类which’d命名
    TestFilter
    。正确命名类非常重要,当我第一次看到您的代码时,我认为
    TestFilter
    该类 a
    FilterSet
    而不是a
    Form



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5431559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存