Google App Engine
"indexed"について
最終更新日: 2009年5月10日

SDKのバージョン1.2.2から、modelのpropertyのconstructorにBoolean値"indexed"を指定できるようになった。

以前はStringPropertyに対しては必ずindexが作られてしまう仕様だったので、queryの条件に指定しない文字列のpropertyには、datastoreの容量やput()にかかる時間を節約するためにTextPropertyを指定するほうが良かった。これを忘れると、気がつかないうちにいろいろと無駄が生じてしまう。

また、DjangoのModelFormではTextPropertyはtexareaとして扱われてしまうため、単純にinputとして扱いたい場合には それを明示的に指定してやる必要があった。

具体的には

from google.appengine.ext import db
from django.forms import ModelForm
from django.forms import CharField

class TestModel(db.Model):
  test_string = db.TextProperty()

class TestModelForm(ModelForm):
  test_string = CharField()  # これがないと、formでtextareaになってしまう。

  class Meta:
    model = TestModel

constructorに"indexed"を追加できるようになったため、

from google.appengine.ext import db
from django.forms import ModelForm

class TestModel(db.Model):
  test_string = db.StringProperty(indexed=False)

class TestModelForm(ModelForm):
  class Meta:
    model = TestModel

のように、StringPropertyを使ってもindexを作らないように指定できる。