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を作らないように指定できる。