You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django REST Framework+Datatables实现表格搜索时遇序列化错误

Datatable搜索功能异常问题

已成功展示Datatable,但表格搜索功能出现异常,以下是相关代码及报错信息:

models.py

class Sites(models.Model):
    site_id = models.IntegerField(primary_key=True)
    site_name = models.CharField(max_length=20)
    site_description = models.TextField()

    class Meta:
        managed = False
        db_table = 'sites'

views.py

class SitesViewSet(viewsets.ModelViewSet):
    queryset = Sites.objects.all()
    serializer_class = SitesViewSerializer

    def list(self, request, **kwargs):
        try:
            query = query_sites_by_args(**request.query_params)
            serializer = SitesViewSerializer(query['items'], many=True)
            result = dict()
            result['data'] = serializer.data
            result['draw'] = query['draw']
            result['recordsTotal'] = query['total']
            result['recordsFiltered'] = query['count']
            return Response(result, status=status.HTTP_200_OK, template_name=None, content_type=None)

        except Exception as e:
            return Response(e, status=status.HTTP_404_NOT_FOUND, template_name=None, content_type=None)

serializers.py

class SitesViewSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sites
        fields = ('site_id', 'site_name', 'site_description')

JavaScript代码

$(document).ready(function() {

    let table = $('#datatables').DataTable({
        search:{
        },
        lengthMenu: [[25, 50, 100, -1], [25, 50, 100, "All"]],
        responsive: true,
        processing: true,
        serverSide: true,
        bSearchable: true,
        ajax: {
            url: "/api/sites/",
            type: "GET"
        },
        columns: [
            {"data": "site_id"},
            {"data": "site_name"},
            {"data": "site_description"},
             // {"data": "link"},
            {
                "data": null,
                "defaultContent": '<button type="button" class="btn btn-success">View Participants</button>'

            }
        ],
    } );

    // on button click
   $('#datatables tbody').on('click', 'button', function (x) {
        let url;
        let data = table.row($(this).parents('tr')).data();
        let class_name = $(this).attr('class');

        if (class_name === 'btn btn-success') {
            // assign the full s3 path of the file to filename
            let sitename = data['site_name'];

            url = 'site' + "/" + sitename;

            location.href = url;

        }

   });
} );

报错信息

Internal Server Error: /api/sites/
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/handlers/base.py", line 202, in _get_response
    response = response.render()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/rest_framework/response.py", line 70, in rendered_content
    ret = renderer.render(self.data, accepted_media_type, context)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/rest_framework/renderers.py", line 99, in render
    ret = json.dumps(
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/rest_framework/utils/json.py", line 25, in dumps
    return json.dumps(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/rest_framework/utils/encoders.py", line 67, in default
    return super().default(obj)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type FieldError is not JSON serializable
[03/May/2023 22:46:49] "GET /api/sites/?draw=3&columns%5B0%5D%5Bdata%5D=site_id&columns%5B0%5D%5Bname%5D=&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=true&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=site_name&columns%5B1%5D%5Bname%5D=&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=true&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=site_description&columns%5B2%5D%5Bname%5D=&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=true&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B3%5D%5Bdata%5D=&columns%5B3%5D%5Bname%5D=&columns%5B3%5D%5Bsearchable%5D=true&columns%5B3%5D%5Borderable%5D=true&columns%5B3%5D%5Bsearch%5D%5Bvalue%5D=&columns%5B3%5D%5Bsearch%5D%5Bregex%5D=false&order%5B0%5D%5Bcolumn%5D=0&order%5B0%5D%5Bdir%5D=asc&start=0&length=25&search%5Bvalue%5D=yay&search%5Bregex%5D=false&_=1683154006765 HTTP/1.1" 500 110334

推测

搜索功能异常可能是请求格式不正确导致了该TypeError。


内容的提问来源于stack exchange,提问作者matthew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:17:02