Джанго получить значения с точечным полем - PullRequest
0 голосов
/ 11 января 2019

Я хочу получить x и y этим queryset:

user = User.objects.values('id', 'email', 'username', 'point').first()

Это мой models:

from django.db.models import Model

from django.contrib.gis.db.models import PointField

class BasePointModel(Model):

    point = PointField(null=True, spatial_index=True, geography=True)

    class Meta:
        abstract = True

class User(AbstractUser, BasePointModel, HashableModel):  # type: ignore

    # First Name and Last Name do not cover name patterns
    # around the globe.
    name = CharField(_("Name of User"), blank=True, max_length=255)
    is_online = BooleanField(_("Is online"), default=False)

Но я получаю следующий результат:

{'id': 85270,
 'email': 'username_0@email.com',
 'username': 'username_0',
 'point': <Point object at 0x7f8e061cc2b8>}

Как я могу получить x и y, сделав набор запросов с values?

Я хочу получить что-то вроде этого:

{'id': 85270,
 'email': 'username_0@email.com',
 'username': 'username_0',
 'point__x': '-4.266398314110177',
 'point__y': '-39.39432682357033'}

Я делаю запросы, которые возвращают 50 000 строк из базы данных, и замечаю, что производительность ухудшается из-за сериализации данных. Я хочу минимизировать сериализацию, возвращая values.

Но PointField всегда возвращает object, и я до сих пор не нашел способа сериализовать его наилучшим образом.

...