如何序列化 Django 模型以匹配 Bootstrap-tables 插件所需的格式?
How to serialize Django model to match with format required by Bootstrap-tables plugin?
我正在尝试在服务器端实现 bootstrap-table 插件,我正在使用 Django 休息框架将数据传递给 table 但我总是收到消息 "No matching records found",做一些研究我发现需要特定格式才能使插件工作(如文档中所示:请注意,所需的服务器响应格式因 'client' 是否不同而不同或指定 'server' 选项。请参阅以下示例:Without server-side pagination, With server-side pagination) 在我的例子中,我使用以下代码:
1) serializers.py
from rest_framework import serializers
from .models import Datos
class DatosSerializer(serializers.ModelSerializer):
class Meta:
model = Datos
fields = (
'loteInsp',
'descripcion',
'fecha',
'material',
'batch',
'acepRech',
'resultado',
'limiteInferior',
'target',
'limiteSuperior',
)
2) views.py
from rest_framework import generics
from .models import Datos
from .serializers import DatosSerializer
class DatosViewSet(generics.ListAPIView):
queryset = Datos.objects.all().order_by('fecha')
serializer_class = DatosSerializer
3) urls.py
path('json/', DatosViewSet.as_view(), name='json'),
但是使用这种配置,我从服务器获得的结果在控制台中看起来像这样:
callback({"count":1064,"next":"http://127.0.0.1:8000/datos/json/?format=jsonp&limit=10&offset=0&order=asc&page=2&search=","previous":null,"results":[{"loteInsp":40004129308,"descripcion":"ALCANFOR P/P","fecha":"2015-01-03","material":15131132,"batch":"50602709L0","acepRech":true,"resultado":4.9,"limiteInferior":4.73,"target":5.26,"limiteSuperior":5.79},{"loteInsp":40004129308,"descripcion":"AC. DE EUCALIPTO P/P","fecha":"2015-01-03","material":15131132,"batch":"50602709L0","acepRech":true,"resultado":1.29,"limiteInferior":1.24,"target":1.33,"limiteSuperior":1.46},...
我如何修改序列化程序(或其他东西)才能获得 bootstrap-tables 所需格式的响应?
示例:
{
"total": 800,
"totalNotFiltered": 800,
"rows": [
{
"id": 0,
"name": "Item 0",
"price": "[=15=]"
},
{
"id": 1,
"name": "Item 1",
"price": ""
},
{
"id": 2,
"name": "Item 2",
"price": ""
},
]
}
非常感谢任何建议或想法。
我找到了一种方法让bootstrap-table读取数据,我修改了视图DatosViewSet如下:
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET',])
def api_view_set(request):
if request.method=='GET':
datos = Datos.objects.all().order_by('fecha')
serializer = DatosSerializer(datos, many=True)
return Response(serializer.data)
urls.py
path('json2/', api_view_set, name='json2'),
通过此修改,现在数据已加载到 Bootstrap-table 中,在 table header 选项中使用此行调用 url:
data-url="{% url 'app:json2'%}"
我正在尝试在服务器端实现 bootstrap-table 插件,我正在使用 Django 休息框架将数据传递给 table 但我总是收到消息 "No matching records found",做一些研究我发现需要特定格式才能使插件工作(如文档中所示:请注意,所需的服务器响应格式因 'client' 是否不同而不同或指定 'server' 选项。请参阅以下示例:Without server-side pagination, With server-side pagination) 在我的例子中,我使用以下代码:
1) serializers.py
from rest_framework import serializers
from .models import Datos
class DatosSerializer(serializers.ModelSerializer):
class Meta:
model = Datos
fields = (
'loteInsp',
'descripcion',
'fecha',
'material',
'batch',
'acepRech',
'resultado',
'limiteInferior',
'target',
'limiteSuperior',
)
2) views.py
from rest_framework import generics
from .models import Datos
from .serializers import DatosSerializer
class DatosViewSet(generics.ListAPIView):
queryset = Datos.objects.all().order_by('fecha')
serializer_class = DatosSerializer
3) urls.py
path('json/', DatosViewSet.as_view(), name='json'),
但是使用这种配置,我从服务器获得的结果在控制台中看起来像这样:
callback({"count":1064,"next":"http://127.0.0.1:8000/datos/json/?format=jsonp&limit=10&offset=0&order=asc&page=2&search=","previous":null,"results":[{"loteInsp":40004129308,"descripcion":"ALCANFOR P/P","fecha":"2015-01-03","material":15131132,"batch":"50602709L0","acepRech":true,"resultado":4.9,"limiteInferior":4.73,"target":5.26,"limiteSuperior":5.79},{"loteInsp":40004129308,"descripcion":"AC. DE EUCALIPTO P/P","fecha":"2015-01-03","material":15131132,"batch":"50602709L0","acepRech":true,"resultado":1.29,"limiteInferior":1.24,"target":1.33,"limiteSuperior":1.46},...
我如何修改序列化程序(或其他东西)才能获得 bootstrap-tables 所需格式的响应?
示例:
{
"total": 800,
"totalNotFiltered": 800,
"rows": [
{
"id": 0,
"name": "Item 0",
"price": "[=15=]"
},
{
"id": 1,
"name": "Item 1",
"price": ""
},
{
"id": 2,
"name": "Item 2",
"price": ""
},
]
}
非常感谢任何建议或想法。
我找到了一种方法让bootstrap-table读取数据,我修改了视图DatosViewSet如下:
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET',])
def api_view_set(request):
if request.method=='GET':
datos = Datos.objects.all().order_by('fecha')
serializer = DatosSerializer(datos, many=True)
return Response(serializer.data)
urls.py
path('json2/', api_view_set, name='json2'),
通过此修改,现在数据已加载到 Bootstrap-table 中,在 table header 选项中使用此行调用 url:
data-url="{% url 'app:json2'%}"