Я пытаюсь использовать ax ios для создания сообщения в базе данных ГИС, созданной с использованием Django. Проблема в том, что у меня есть геометрическая точка в моей модели, а в моем внешнем приложении - только координаты.
Итак, теперь мой вопрос: как создать POST-запрос к таблице, содержащей объект Geometry? Вот что у меня есть на данный момент:
Django модель:
class Place(geomodel.Model):
place_name = geomodel.CharField(max_length=256)
description = geomodel.TextField(blank=True)
picture = models.ImageField(blank=True)
place_type = models.ForeignKey(PlaceType, on_delete=models.CASCADE)
geom = geomodel.PointField()
approved = models.BooleanField(default=False)
telephone = models.CharField(max_length=256)
rating = models.IntegerField()
numberOfVotes = models.IntegerField()
createdBy = models.ForeignKey(RegisteredUsers, on_delete=models.CASCADE)
def __str__(self):
return self.place_name
Django сериализатор:
PlaceSerializer(GeoFeatureModelSerializer):
place_comments = CommentSerializer(many = True, required=False)
dis = serializers.DecimalField(source='distance.m', required=False, read_only=True, max_digits=10, decimal_places=2)
class Meta:
model = Place
geo_field = "geom"
fields = ("id", "place_name", 'description', 'picture', 'place_type', 'dis', 'approved', 'place_comments')
Django вид:
PlaceViewSet(viewsets.ModelViewSet):
queryset = Place.objects.all().filter(approved=True)
serializer_class=PlaceSerializer
def get_queryset(self):
qs = super().get_queryset()
latitude = self.request.query_params.get('lat', None)
longitude = self.request.query_params.get('lng', None)
distance = self.request.query_params.get('dist', None)
if latitude and longitude:
pnt = geos.GEOSGeometry('POINT(' + str(longitude) + ' ' + str(latitude) + ')', srid=4326)
if distance:
qs = DogPlace.objects.all().filter(geom__dwithin=(pnt, distance))
qs = qs.annotate(distance=Distance('geom', pnt)).order_by('distance')
return qs
и во внешнем интерфейсе:
const createPlace = async () => {
const data = {
"place_name": placeName,
"description": placeDescription,
"geom": `SRID = 3857; POINT(${props.route.params.location.lat} ${props.route.params.location.lng})`,
"picture": image,
"place_type": 1,
"approved": false
}
places.post(`/places/?lat=23&lng=12`, data).then(response => {
console.log(response.data)
})
.catch(error => {
console.log(error);
})
}
Я пробовал все типы представления функции createPlace, но всегда получаю
Request failed with status code 400
- node_modules/axios/lib/core/createError.js:15:17 in createError
- node_modules/axios/lib/core/settle.js:16:9 in settle
- node_modules/axios/lib/adapters/xhr.js:52:6 in handleLoad
- node_modules/event-target-shim/dist/event-target-shim.js:818:39 in EventTarget.prototype.dispatchEvent
- node_modules/react-native/Libraries/Network/XMLHttpRequest.js:566:23 in setReadyState
- node_modules/react-native/Libraries/Network/XMLHttpRequest.js:388:25 in __didCompleteResponse
- node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js:190:12 in emit
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:436:47 in __callFunction
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:111:26 in __guard$argument_0
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:384:10 in __guard
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:110:17 in __guard$argument_0
* [native code]:null in callFunctionReturnFlushedQueue
Думаю, мне что-то не хватает в части django, так как я не совсем новичок во всей концепции django, но если кто-то может дать мне направление, по которому можно добраться до go, было бы здорово.