Update
Here's how I managed - at the end - to save separate fields for longitude and longitude without saving them in the database, since the values are already stored in PointField.
The idea is this:
- If we insert a new record, the latitude and longitude fields will be used to set PointField
- PointField, FormFields.
models.py
from django.contrib.gis.db import models as geomodels
class Entry(geomodels.Model):
point = geomodels.PointField(
srid=4326,
blank=True,
)
admin.py
from myapp.forms import EntryForm
from django.contrib import admin
class EntryAdmin(admin.ModelAdmin):
form = EntryForm
admin.site.register(Entry, EntryAdmin)
forms.py
from django import forms
from myapp.models import Entry
from django.contrib.gis.geos import Point
class MarketEntryForm(forms.ModelForm):
latitude = forms.DecimalField(
min_value=-90,
max_value=90,
required=True,
)
longitude = forms.DecimalField(
min_value=-180,
max_value=180,
required=True,
)
class Meta(object):
model = MarketEntry
exclude = []
widgets = {'point': forms.HiddenInput()}
def __init__(self, *args, **kwargs):
if args:
data = args[0]
if data['latitude'] and data['longitude']:
latitude = float(data['latitude'])
longitude = float(data['longitude'])
data['point'] = Point(longitude, latitude)
try:
coordinates = kwargs['instance'].point.tuple
initial = kwargs.get('initial', {})
initial['latitude'] = coordinates[0]
initial['longitude'] = coordinates[1]
kwargs['initial'] = initial
except (KeyError, AttributeError):
pass
super().__init__(*args, **kwargs)
PointField , OpenLayersWidget, BaseGeometryWidget.
, display_raw False.
True yourapp/admin.py, , :
from django.contrib.gis import admin
from yourapp.models import YourClass
from django.contrib.gis import forms
from django.contrib.gis.db import models
class YourClassAdminForm(forms.ModelForm):
your_attribute = forms.PointField(widget=forms.OSMWidget(attrs={
'display_raw': True}))
class YourClassAdmin(admin.GeoModelAdmin):
form = YourClassAdminForm
admin.site.register(YourClass, YourClassAdmin)
/ ( ).
, FloatFields Longitude/Latitude PointField .