Отправка GeoJSON с DRF приводит к тому, что «функция st_geomfromewkb (bytea) не существует» - PullRequest
0 голосов
/ 05 октября 2019

Я настроил API Django Rest Framework (DRF), используя django-rest-framework-gis .

Он прекрасно работает для публикации данных из интерфейса API, пока яоставьте геометрическое поле равным null. Но как только я пытаюсь включить GeoJSON в поле geometry (как показано ниже) ...

{
    "gmlid": "this is a test from DRF interface",
    "name": "",
    "envelope": { "type": "Point", "coordinates": [ 5.000000, 23.000000 ] },
    "creation_date": null,
    "xml_source": ""
}

... я получаю следующую ошибку:

ProgrammingErrorat / en / api / cityobject /

функция st_geomfromewkb (bytea) не существует LINE 1: ... atest_from_browser ',' ',' ',' ',' ', ST_Transform (ST_GeomFro ... ^СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента. Возможно, вам понадобится добавить явное приведение типов.

Метод запроса: URL запроса POST: http://127.0.0.1:8000/en/api/cityobject/ Версия Django: 2.2 Тип исключения: Значение исключения ProgrammingError:

функция st_geomfromewkb (bytea) не существует ЛИНИЯ 1: ... atest_from_browser ',' ',' ',' ',' ', ST_Transform (ST_GeomFro ... ^ СОВЕТ: ни одна функция не соответствует заданномутипы имен и аргументов. Возможно, вам потребуется добавить явное приведение типов.

Местоположение исключения: /home/me/dj-workspace/my-venv/lib/python3.6/site-packages/django/db/backends / utils.py в _execute, строка 84 Исполняемый файл Python: / home / me / dj-workspace / my-venv / bin / python Python Version: 3.6.8 Python Path:

['/ home / me / dj-workspace / myapp', '/usr/lib/python36.zip', '/usr/lib/python3.6','/usr/lib/python3.6/lib-dynload', '/home/me/dj-workspace/my-venv/lib/python3.6/site-packages']

Время сервера: сб, 5 октября 2019 г. 07:49:35 + 0000

Что может быть причиной этой ошибки?


Мой код выглядит следующим образом:

модели. py

class Cityobject(models.Model):
    gmlid = models.CharField(max_length=256, blank=True, null=True)
    name = models.CharField(max_length=1000, blank=True, null=True)
    envelope = models.GeometryField(blank=True, null=True, srid=2056)  
    creation_date = models.DateTimeField(blank=True, null=True)
    xml_source = models.TextField(blank=True, null=True)

    def __str__(self):
        return "Name - {0} -- GML ID - {1}".format(self.name, self.gmlid) 

    class Meta:
        managed = False
        db_table = 'cityobject'        

views.py

class CityobjectViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows Cityobject information to be viewed or edited.
    """    
    lookup_field = 'id' 
    queryset = Cityobject.objects.all()  
    serializer_class = CityobjectSerializer
    filter_fields = ('id','gmlid','name',)   

urls.py

router = routers.DefaultRouter()
router.register(r'cityobject', views.CityobjectViewSet, 'cityobject')
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

serializers.py

class CityobjectSerializer(GeoFeatureModelSerializer):
    class Meta:
        model = Cityobject
        fields = (
                    "gmlid",
                    "name",
                    "envelope",
                    "creation_date",
                    "xml_source"
            )    
        geo_field = 'envelope'      

settings.py

DATABASES = {

    'default': 
            {
            },       
    'citydb': 
            {
            'ENGINE': 'django.contrib.gis.db.backends.postgis', 
            'OPTIONS': {
                            'options': '-c search_path=citydb'
                        },
            'NAME': 'db_dev',
            'USER': secrets.USER,
            'PASSWORD': secrets.PASSWORD,
            'HOST': 'my.host.com',
            'PORT': '5432',
            },

}

INSTALLED_APPS = [
    'modeltranslation', #must be before django.contrib.admin
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.gis',
    'main_app',
    'django_extensions',
    'rest_framework',
    'rest_framework_gis',
    'django_filters',
    'leaflet',
     ...
]
...