Если я использую GeoDjango, имеет ли значение, какие модели я наследую?

В обычной модели Django мы наследуем от

from django.db import models
class New_model(models.Model):
    ...

Я пытаюсь научиться использовать GeoDjango, у которого также есть собственный класс моделей.

from django.contrib.gis.db import models
class New_Model(models.Model) :
     ...

Нужно ли мне наследовать от конкретных моделей библиотеки gis.db или я все еще могу использовать обычные модели models.Model. (будет ли это вообще иметь какой-то эффект?)

ОБНОВЛЕНИЕ: у меня возникли проблемы с этой моделью из учебника, поскольку вся модель не наследуется от db.gis.models.Model, а скорее наследуется от django.db.models.Model. Поля взяты из db.gis.models.Model.

from django.contrib.gis.db import models as gis_models
from django.contrib.gis import geos
from django.db import models

class Shop(models.Model):
    name = models.CharField(max_length=200)
    address = models.CharField(max_length=100)
    city = models.CharField(max_length=50)
    location = gis_models.PointField(u"longitude/latitude",
                                 geography=True, blank=True, null=True)

    gis = gis_models.GeoManager()
    objects = models.Manager()

    def __unicode__(self):
        return self.name

person Kendall    schedule 25.09.2015    source источник
comment
Allter можно использовать для любой модели, но это обязательно, если вы хотите использовать функции ГИС. Но что с {} и _ в имени класса?   -  person e4c5    schedule 25.09.2015
comment
Моя ошибка заключалась в том, что я писал на многих языках стиля C   -  person Kendall    schedule 25.09.2015
comment
Я сбит с толку, потому что в этом руководстве в моделях автор не наследует gis.db.models.Model, а использует поле из него, или я неправильно читаю? ссылка @e4c5   -  person Kendall    schedule 25.09.2015
comment
Извините, нет времени читать учебник. Если в нем есть определенная область, которая вызывает у вас недоумение, обновите свой вопрос, добавив выдержку.   -  person e4c5    schedule 25.09.2015


Ответы (1)


Почему именно код в учебнике, на который вы ссылаетесь, использует db.model, является загадкой. Как видно из документации DJango API. PointField является членом django.contrib.gis.db.models.Model, а не django.db.models.Model. Обратите внимание, что они произошли от django.db.models.Model, но все же определили поле местоположения как

location = gis_models.PointField(u"longitude/latitude",
                                 geography=True, blank=True, null=True)

где gis_models происходит из этой строки:

from django.contrib.gis.db import models as gis_models

И тогда им пришлось определить двух менеджеров:

gis = gis_models.GeoManager()
objects = models.Manager()

тогда как при нормальных обстоятельствах достаточно одного. Короче говоря, они написали длинный запутанный код только для того, чтобы избежать вывода из django.contrib.gis.db.models.Model

person e4c5    schedule 26.09.2015