2011-10-24 76 views
1

我在玩GeoDjango並有一些疑問。我會很感激任何評論和建議。使用GeoDjango模型作爲抽象類

這是我的問題。首先,我定義這個(抽象)類:

from django.contrib.gis.db import models 
from django.contrib.gis.geos import * 

class LocatableModel(models.Model): 
    country = models.CharField(max_length=48, blank=True) 
    country_code = models.CharField(max_length=2, blank=True) 
    locality = models.CharField(max_length=48, blank=True) 
    sub_locality = models.CharField(max_length=48, blank=True) 
    street = models.CharField(max_length=48, blank=True) 
    address = models.CharField(max_length=120, blank=True) 
    point = models.PointField(null=True) 
    objects = models.GeoManager() 

    class Meta: 
     abstract = True 

其次,我定義這等「實體」的類,它 代表與我的網站的個人或組織:

from django.db import models 

class Entity(models.Model): 
    name = models.CharField(max_length=64) 
    slug = models.SlugField(max_length=64, unique=True) 
    website = models.URLField(verify_exists=False, blank=True) 
    email = models.EmailField(blank=True) 
    ... 

最後,我創建了從以前的一類:

import LocatableModel 
import Entity 

class Organization(Entity, LocatableModel): 
    timetable = models.CharField(max_length=64) 
    ... 

在我的意見,我想找到組織附近的特定點:

from django.contrib.gis.geos import Point 
from django.contrib.gis.measure import D 

def index(request): 
    pnt = Point(12.4604, 43.9420) 
    dic = { 'orgs': Organization.objects.filter(point__distance__lte=(pnt, D(km=7))) } 
    return render_to_response('index.html', dic) 

但我收到的錯誤:

「加入現場 '點' 不允許的。你有沒有提前拼錯「距離」爲 查找類型?」

我覺得我在做與模型‘對象’屬性一團糟,但我不知道。任何想法? 感謝。

回答

3

這種錯誤以前已經見過,並聲稱在此票3年前來解決:

https://code.djangoproject.com/ticket/9364

當我碰到了同樣的問題,我在查詢管理設置明確的機票注意到到繼承的模型中的GeoManager,因此添加一條線,如


class Organization(Entity, LocatableModel): 
    timetable = models.CharField(max_length=64) 
    ... 
    objects = models.GeoManager() 

...可以解決你所看到的問題,它對我有用。