El SQL para eliminar la restricción:
ALTER TABLE myapp_mymodel DROP CONSTRAINT enforce_geotype_mygeom;
O para modificarlo para permitir tanto Polígonos como MultiPolígonos:
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);
Estas declaraciones SQL podrían ser ejecutadas desde una migración de South o un script SQL de datos iniciales.
Otra opción es hacerlo un GeometryField
en la definición de tu modelo de Django - esto permitirá que almacene cualquier tipo de geometría.
O, sobrescribe el método save()
en tu modelo para forzar que todo sea un MultiPolígono:
from django.contrib.gis.db import models
from django.contrib.gis import geos
class MyModel(models.Model):
mygeom = models.MultiPolygonField()
... otros campos....
def save(self, *args, **kwargs):
# si mygeom termina siendo un Polígono, conviértelo en un MultiPolígono
if self.mygeom and isinstance(self.mygeom, geos.Polygon):
self.mygeom = geos.MultiPolygon(self.mygeom)
super(MyModel).save(*args, **kwargs)