Как сериализовать модель Django для соответствия формату, необходимому для плагина Bootstrap-tables? - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь реализовать плагин загрузочной таблицы с серверной стороны, я использую Django rest framework для передачи данных в таблицу, но я всегда получаю сообщение «Не найдено соответствующих записей», проводя некоторые исследования, которые я нашелчто для работы плагина требуется определенный формат (как видно из документации: обратите внимание, что требуемый формат ответа сервера отличается в зависимости от того, указана опция «клиент» или «сервер». См. следующие примеры: Без нумерации на стороне сервера , С нумерацией на стороне сервера ) В моем случае я использую следующий код:

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},...

Как мне изменить сериализатор (или другие вещи), чтобы получить ответ в формате, необходимом для таблиц начальной загрузки?

пример:

{
  "total": 800,
  "totalNotFiltered": 800,
  "rows": [
    {
      "id": 0,
      "name": "Item 0",
      "price": "$0"
    },
    {
      "id": 1,
      "name": "Item 1",
      "price": "$1"
    },
    {
      "id": 2,
      "name": "Item 2",
      "price": "$2"
    },
        ]
    }

Заранее большое спасибо за любые предложения или идеи.

1 Ответ

0 голосов
/ 15 октября 2019

Я нашел способ заставить загрузочную таблицу читать данные, я изменил представление 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-таблицу, вызывая URL с этой строкой в ​​опциях заголовка таблицы:

data-url="{% url 'app:json2'%}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...