this is an inherited model from city srid by default is 4326 this is an inherited model from city allowing null geometries here minus one srid
from django.contrib.gis.db import models

from ..utils import gisfield_may_be_null


class NamedModel(models.Model):
    name = models.CharField(max_length=30)

    class Meta:
        abstract = True

    def __str__(self):
        return self.name


class Country(NamedModel):
    mpoly = models.MultiPolygonField()  


class CountryWebMercator(NamedModel):
    mpoly = models.MultiPolygonField(srid=3857)


class City(NamedModel):
    point = models.PointField()

    class Meta:
        app_label = "geoapp"



class PennsylvaniaCity(City):
    county = models.CharField(max_length=30)
    founded = models.DateTimeField(null=True)

    class Meta:
        app_label = "geoapp"


class State(NamedModel):
    poly = models.PolygonField(
        null=gisfield_may_be_null
    )  

    class Meta:
        app_label = "geoapp"


class Track(NamedModel):
    line = models.LineStringField()


class MultiFields(NamedModel):
    city = models.ForeignKey(City, models.CASCADE)
    point = models.PointField()
    poly = models.PolygonField()


class UniqueTogetherModel(models.Model):
    city = models.CharField(max_length=30)
    point = models.PointField()

    class Meta:
        unique_together = ("city", "point")
        required_db_features = ["supports_geometry_field_unique_index"]


class Truth(models.Model):
    val = models.BooleanField(default=False)


class Feature(NamedModel):
    geom = models.GeometryField()


class ThreeDimensionalFeature(NamedModel):
    geom = models.GeometryField(dim=3)

    class Meta:
        required_db_features = {"supports_3d_storage"}


class MinusOneSRID(models.Model):
    geom = models.PointField(srid=-1)  


class NonConcreteField(models.IntegerField):
    def db_type(self, connection):
        return None

    def get_attname_column(self):
        attname, column = super().get_attname_column()
        return attname, None


class NonConcreteModel(NamedModel):
    non_concrete = NonConcreteField()
    point = models.PointField(geography=True)


class ManyPointModel(NamedModel):
    point1 = models.PointField()
    point2 = models.PointField()
    point3 = models.PointField(srid=3857)