如果我使用 GeoDjango,我继承哪个 models.Model 有关系吗?
If I am using GeoDjango does it matter which models.Model I inherit?
在我们继承的普通 Django 模型中
from django.db import models
class New_model(models.Model):
...
我正在尝试学习使用 GeoDjango,它也有自己的模型 class
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
为什么您提到的教程中的代码使用 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
派生
在我们继承的普通 Django 模型中
from django.db import models
class New_model(models.Model):
...
我正在尝试学习使用 GeoDjango,它也有自己的模型 class
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
为什么您提到的教程中的代码使用 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