如果我正在使用GeoDjango,那么重要的是哪个models.Model我继承了?

时间:2015-09-25 07:46:41

标签: django django-models 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

1 个答案:

答案 0 :(得分:0)

为什么确切地说明您使用db.model引用的教程中的代码是个谜。正如您将从DJango API documentation中看到的那样。 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