Django REST Framework Datatables报FieldError:无法解析关键字'0'
错误原因及修复方案
错误核心分析
从请求参数和错误栈可以看出,后端尝试解析关键字'0'作为模型字段,但你的AuthUser模型并没有这个字段。问题根源来自前端Datatables配置与后端DRF-Datatables的不匹配,具体原因如下:
Datatables默认传递列索引而非字段名
你前端的Datatables初始化时没有显式配置columns.data,导致Datatables默认将列索引(0、1、2...)作为data参数传给后端。DRF-Datatables收到这些索引值后,会错误地将其当作模型字段名用于排序操作,从而抛出Cannot resolve keyword '0' into field的错误。前端模板与后端接口不匹配
- 你的表格表头是产品相关的(Item Code、Customer Barcode等),但请求的却是用户接口
user_viewset,完全不对应。 - 前端AJAX请求的URL写的是
../api/product_viewset/?format=datatables,但后端注册的是user_viewset,接口路径不匹配。
- 你的表格表头是产品相关的(Item Code、Customer Barcode等),但请求的却是用户接口
后端视图未配置DRF-Datatables过滤器
你的UsersViewSet没有添加DRF-Datatables专用的过滤器后端,导致无法正确处理Datatables的请求参数。
具体修复步骤
1. 修正前端Datatables配置
更新模板中的表格表头和Datatables初始化代码,使其与用户接口的字段对应:
<div class="table-responsive-xl"> <table class="table table-hover table-striped table-sm" id="table1"> <thead class="sticky-top top-0"> <tr> <th>First Name</th> <th>Last Name</th> <th>Email</th> </tr> </thead> </table> </div> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script src="//cdn.datatables.net/2.0.8/js/dataTables.min.js"></script> <script> $(document).ready(function () { $('#table1').DataTable({ "serverSide": true, "ajax": "../api/user_viewset/?format=datatables", "columns": [ {"data": "first_name"}, {"data": "last_name"}, {"data": "email"} ] }); }); </script>
2. 配置后端视图的过滤器
在views.py中添加DRF-Datatables的过滤器后端:
from rest_framework_datatables.filters import DatatablesFilterBackend class UsersViewSet(viewsets.ModelViewSet): queryset = models.AuthUser.objects.all().order_by("last_name") serializer_class = serializers.UsersSerializer filter_backends = (DatatablesFilterBackend,)
3. 确保接口路径一致
确认前端AJAX的URL与后端urls.py中注册的user_viewset路径匹配,避免请求错误的接口。
内容的提问来源于stack exchange,提问作者riccoding
相关产品推荐
相关产品推荐

