SQL to drop the constraint:
ALTER TABLE myapp_mymodel DROP CONSTRAINT enforce_geotype_mygeom;
Atau untuk mengubahnya agar memungkinkan kedua Poligon & MultiPoligon:
ALTER TABLE myapp_mymodel DROP CONSTRAINT enforce_geotype_mygeom;
ALTER TABLE myapp_mymodel ADD CONSTRAINT enforce_geotype_mygeom CHECK (geometrytype(mygeom) = 'POLYGON'::text OR geometrytype(mygeom) = 'MULTIPOLYGON'::text OR mygeom IS NULL);
Pernyataan SQL ini dapat dijalankan dari migrasi Selatan atau skrip SQL data awal .
Pilihan lain adalah membuatnya GeometryField
dalam definisi model Django Anda - ini akan memungkinkannya untuk menyimpan semua jenis geometri.
Atau, save()
ganti metode pada model Anda untuk memaksa semuanya menjadi MultiPolygon:
from django.contrib.gis.db import models
from django.contrib.gis import geos
class MyModel(models.Model):
mygeom = models.MultiPolygonField()
... other fields....
def save(self, *args, **kwargs):
# if mygeom ends up as a Polgon, make it into a MultiPolygon
if self.mygeom and isinstance(self.mygeom, geos.Polygon):
self.mygeom = geos.MultiPolygon(self.mygeom)
super(MyModel).save(*args, **kwargs)
solusi gondrong
satu dapat menggunakan fromstr ()
sumber
Saya tahu ini sudah tua, tetapi saya sendiri mengalami masalah ini dan mengalami masalah dalam menggunakan solusi yang disarankan di atas:
Menggunakan
GeometryField
membuatnya sulit untuk menggunakanOSMGeoAdmin
kelas bawaan. Kode dalamtemplates/gis/admin/openlayers.js
(dancontrib/gis/admin/widgets.py
dan mungkin tempat lain yang saya lewatkan) sering mengasumsikan bahwa geometri adalah titik, garis, poligon, atau koleksi, dan tidak pernah menjelaskan geometri generik. Ini tidak selalu penting atau tidak dapat diatasi, tetapi jika Anda berencana menggunakan admin bawaan, Anda mungkin akan kecewa.Overriding
save()
tidak berfungsi karena pengecekan tipe terjadi lebih cepat, pada model__set__()
.Solusi saya saat ini secara eksplisit memaksa semua saya
Polygon
s keMultiPolygon
s ketika mengimpor dan menyimpan data saya. Saya mungkin menimpa__set__()
jika ini menjadi rumit.sumber