500 (Internal Server Error)

149
17 декабря 2020, 22:00

Имеется форма с двумя выпадающими списками и одной кнопкой. По нажатию на кнопку отправляются данные в виде json, на основе этих данных выполняется фильтрация, потом отфильтрованные данные возвращаются на клиент. Однако, вместо отфильтрованных данных, выводится ошибка 500 (Internal Server Error). В трейсбек выводиться следующее: string indices must be integers. Как исправить данную ошибку?

Представление:

 function GetSelectValue() {
                    var select_type = document.getElementById("type");
                    var type = select_type.value;
                    var select_net = document.getElementById("net");
                    var net = select_net.value;
                    var filter = JSON.stringify({type:type, net:net});
                    return filter
                }
                $(function () {
                    $("#btn1").click(function () {
                        var filter = GetSelectValue();
                        console.log(filter);
                        $.ajax({
                            type: "GET",
                            dataType: 'json',
                            url: '/map/filter/',
                            data: {
                                'filter': filter
                            },
                            success:
                                function (stations) {
                                    pointLayer.removeAll();
                                    draw_point_layer(stations);
                                },
                            error: function (xhr, status, error) {
                                console.log(error);
                            }
                        })
                    });
                });
<body>
<div name="infoDiv" id="infoDiv" class="esri-widget">
    <!--<b>Filter by geometry</b><br/><br/>-->
    <label for="net">Сеть:</label>
    <select id="net" class="options">
        <option value="INTERMAGNET">INTERMAGNET</option>
        <option value="IMAGE">IMAGE</option>
        <option value="EISCAT">EISCAT</option>
        <option value="MACCS">MACCS</option>
        <option value="CARISMA">CARISMA</option>
        <option value="CANMOS">CANMOS</option>
        <option value="AUTUMNX">AUTUMNX</option>
        <option value="USGS">USGS</option>
        <option value="AMN">AMN</option>
        <option value="DTU">DTU</option>
        <option value="ENIGMA">ENIGMA</option>
        <option value="EMMA/PLASMON">EMMA/PLASMON</option>
        <option value="Japan Meteorological Agency">Japan Meteorological Agency</option>
        <option value="GFZ">GFZ</option>
        <option value="Italian Magnetic Network">Italian Magnetic Network</option>
        <option value="Mid-continent Magnetoseismic Chain">Mid-continent Magnetoseismic Chain</option>
        <option value="Russian Arctic and Antarctic Magnetometer">Russian Arctic and Antarctic Magnetometer</option>
        <option value="Finnish Meteorological Institute">Finnish Meteorological Institute</option>
        <option value="Swedish Institute of Space Physics">Swedish Institute of Space Physics</option>
        <option value="BAS">BAS</option>
        <option value="Российско-украинский сегмент геомагнитных данных">Российско-украинский сегмент геомагнитных данных</option>
        <option value="all" selected>все</option>
    </select>
    <label for="type">Тип:</label>
    <select id="type" class="options">
        <option value="station">станция</option>
        <option value="observatory">обсерватория</option>
        <option value="all" selected>все</option>
    </select
    ><br/><br/>
    <button id="btn1" class="esri-button" id="clearFilter" type="button">
        Применить
    </button>
</div>
</body>

views.py

from django.shortcuts import render
from django.views.generic import TemplateView
from .models import Station
from django.http import HttpResponse
from django.core import serializers

def filter(request):
    if request.GET:
        filter = request.GET.get('filter')
        type = filter['type']
        if type == 'all':
            stations = serializers.serialize('json', Station.objects.all())
        else:
            stations = serializers.serialize('json', Station.objects.filter(type=type))
    return HttpResponse(stations, content_type='application/json')
Answer 1

Избавился от данной ошибки, применив метод json.loads(). Измененный views.py будет выглядеть следующим образом

    from django.shortcuts import render
    from django.views.generic import TemplateView
    from .models import Station
    from django.http import HttpResponse
    from django.core import serializers
    import json

    def filter(request):
        if request.GET:
            filter = request.GET.get('filter')
            decoded_filter = json.loads(filter)
            type = decoded_filter["type"]
            if type == 'all':
                stations = serializers.serialize('json', Station.objects.all())
            else:
                stations = serializers.serialize('json', Station.objects.filter(type=type))
        return HttpResponse(stations, content_type='application/json')
READ ALSO
encodeURIComponent синтаксис

encodeURIComponent синтаксис

Как правильно кусок кода засунуть в encodeURIComponent при отправке ajax запроса?

129
Ошибка datepicker и laravel 5.8

Ошибка datepicker и laravel 5.8

Привет пример реализации брал от сюда: Пример реализации У меня в blade выглядит код вот так:

140
Генерация формы на лету

Генерация формы на лету

Имеется следующая проблема (см ссылку https://jsfiddlenet/60h1mcL9/)

198