2015-09-25 32 views
1

在一個普通的Django模型中,我們繼承如果我正在使用GeoDjango,那麼關於哪些模型,我繼承的模型是否重要?

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。 (它會不會有什麼影響呢?)

UPDATE: 我有從教程作爲整個模型該模型的麻煩不從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 
+0

這個allter可以用於任何模型,但它是強制性的,如果你想使用GIS的功能。但是,類名中的{}和_是什麼? – e4c5

+0

我的錯誤一直在寫很多C風格的語言 – Kendall

+0

我很困惑,因爲在本教程下的模型中,作者並沒有從gis.db.models.Model繼承,而是使用它的一個字段,或者我正在讀取這個錯誤嗎? [鏈接](http://www.rkblog.rk.edu.pl/w/p/shops-near-you-geographic-features-geodjango/)@ e4c5 – Kendall

回答

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