У меня есть модель с полем, называемым «geom», который является MultiPolygonField. Когда я запрашиваю экземпляры модели, я бы хотел, чтобы данные в этом поле следовали правилу правой руки. Поскольку я использую PostGIS на сервере, у меня есть поддержка ForceRHR (я использую Django 2.06), но я не могу понять, как его использовать.
В views.py я получаю URL-запрос с парами имя-значение, и я преобразую этот словарь в словарь, подходящий для использования в фильтре:
def field_datasets(request):
client_name = 'MSFF'
grower = Growers.objects.filter(name__exact=client_name).get()
fields = serialize('geojson', Fields.objects.filter(grower__exact=grower.id).filter(
Q(*[(k,v)for k,vs in request.GET.lists() for v in vs], _connector=Q.OR)
))
return HttpResponse(fields, content_type='json'
Я пробовал это:
...
test = Fields.objects.filter(grower__exact=grower.id).filter(
Q(*[(k,v)for k,vs in request.GET.lists() for v in vs], _connector=Q.OR)
)
test.update(geom = ForceRHR('geom'))
fields = serialize('geojson', test)
...
и я ' мы попробовали это:
...
test = Fields.objects.filter(grower__exact=grower.id).filter(
Q(*[(k,v)for k,vs in request.GET.lists() for v in vs], _connector=Q.OR)
)
for item in test:
rhr_geom = ForceRHR(item.geom)
test[item].geom = rhr_geom
fields = serialize('geojson', test)
...
В документации сказано: Принимает одно поле или выражение geographi c и возвращает модифицированную версию многоугольника / мультиполигона, в которой все внешние кольца ориентированы по часовой стрелке, а все внутренние кольца ориентированы против часовой стрелки. Неполигональные геометрии возвращаются без изменений.
Как еще я должен пропустить поле geographi c?