У меня есть одна форма и одна форма в моем проекте django. Форма имеет один вход с геометрией Точки. Поэтому у меня есть вход там, который выглядит примерно так:GeoDjango сохранение геометрии точки из формы
39.237103, 25,667217
, когда пользователь отправляет форму, я хочу разделить этот вход и сохранить это как геометрию точки, в моделях точка выглядит следующим образом :
position = gismodels.PointField(null=True, srid=4326)
Я использую этот код для проверки и сохранения формы, formset и точки геометрии
if request.method == "POST":
checklist_form = ChecklistForm(request.POST)
observation_formset = ObservationFormSet(request.POST)
#error
if checklist_form.is_valid() and observation_formset.is_valid():
checklist = checklist_form.save(commit=False)
latitude, longitude = request.POST.get('position', '').split(', ', 1)
checklist.position = Point(longitude, latitude)
checklist.save()
for observation_form in observation_formset:
observation = observation_form.save(commit=False)
observation.checklist_id = checklist
observation.save()
Но проблема в том, что данные POST для позиции имеет плохой формат, чтобы проверка checklist_form поднять эту ошибку прежде, чем я могу разделить координаты:
Строка или юникода вход непризнанные в WKT EWKT и HEXEWKB.
Я читал, что могу скопировать данные POST и изменить их, но я также прочитал, что это плохая практика. Я думаю об использовании javascript для изменения координат для соответствующего формата, но GeoDjango, безусловно, имеет лучшую функциональность для сохранения геометрии точки.
Имейте в виду, что это решение не подтверждает ввод и произойдет сбой, если вход в неправильном формате. Это всегда непригодно для редактирования существующих точек. – Udi