Обслуживание модели django, содержащей объекты - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть следующая django модель:

class Weather(models.Model):

    lat_lng = gis_models.PointField()
    raw_data = psql_fields.JSONField(null=True)

У меня есть следующее представление:

def weather(request):
    data = WeatherModel.objects.all()
    js_data = serializers.serialize('json', data)
    return HttpResponse(js_data, content_type='application/json')

Выдает ошибку, говоря: «Точечный объект не json сериализуем.» Я хочу, чтобы эта функция возвращала json. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вы можете использовать JsonResponse с значениями .

from django.http import JsonResponse

def weather(request):
    data = list(WeatherModel.objects.all())
    js_data = serializers.serialize('json', data)
    return JsonResponse(data, safe=False)  # or JsonResponse({'data': data})

Модифицированный ответ от здесь .

0 голосов
/ 06 апреля 2020

Сериализатор по умолчанию JSON не знает, как сериализовать объекты Point.

Получите свой собственный кодировщик Django. Вы также можете использовать JsonResponse для более короткого кода:

from django.contrib.gis.geos import Point
from django.core.serializers.json import DjangoJSONEncoder
from django.http import JsonResponse


class GeoJSONEncoder(DjangoJSONEncoder):
    def default(self, obj):
        if isinstance(obj, Point):
            return obj.coords
        return super().default(obj)


def weather(request):
    data = WeatherModel.objects.all()
    return JsonResponse(data, encoder=GeoJSONEncoder)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...