Данные для PointField в rest_framework_gis - PullRequest
0 голосов
/ 05 апреля 2020

Я пишу веб-приложение, используя rest_framework_gis. У одной из моих моделей есть PointField

from django.contrib.gis.db import models
from django.contrib.auth import get_user_model

User = get_user_model()


class Avatar(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='avatar')
    location = models.PointField(srid=4326)

    def __str__(self):
        return self.user.username + '\'s avatar'

Затем я сериализую его с GeoFeatureModelSerializer

from rest_framework_gis.serializers import GeoFeatureModelSerializer
from .models import Avatar


class AvatarSerializer(GeoFeatureModelSerializer):

    class Meta:
        model = Avatar
        geo_field = 'location'
        auto_bbox = True
        fields = ('location', )

И, наконец, мои взгляды:

from .models import Avatar
from .serializers import AvatarSerializer
from rest_framework_gis.filters import DistanceToPointFilter


class AvatarViewSet(viewsets.ModelViewSet):

    queryset = Avatar.objects.all()
    serializer_class = AvatarSerializer
    distance_filter_field = 'geometry'
    filter_backends = (DistanceToPointFilter, )
    bbox_filter_include_overlapping = True

Мой вопрос: что это за данные вводить в поле местоположения? Я знаю, что это должно быть в формате JSON. Но что именно я пишу? Если бы кто-нибудь мог привести пример, это было бы очень полезно

1 Ответ

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

О, мальчик, это стыдно. Нашел ответ в GitHub репозитории django -rest-framework-gis Правильный пример таков:

    {
    "id": 1,
    "type": "Feature",
    "geometry": {
        "type": "Point",
        "coordinates": [-123.0208, 44.0464],
    },
    "properties": {
        "address": "742 Evergreen Terrace",
        "city":  "Springfield",
        "state": "Oregon"
    }
}

Надеюсь, это поможет тем, кто искал

...