2012-01-28 9 views
5

私は自分の心を失っていると思うのですが、なぜ次の作業をしないのですか?App EngineをListPropertyに追加する

class Parent(db.Model): 
    childrenKeys = db.ListProperty(str,indexed=False,default=None) 

p = Parent.get_or_insert(key_name='somekey') 
p.childrenKeys = p.childrenKeys.append('newchildkey') 
p.put() 

私はこのエラーを取得する:

BadValueError: Property childrenKeys is required 

DOCは言う:

default is the default value for the list property. If None, the default is an empty list. A list property can define a custom validator to disallow the empty list.

だから私はそれを参照してください方法は、私はデフォルト(空のリスト)を取得し、追加しています新しい価値とそれを保存すること。これで

p.childrenKeys = p.childrenKeys.append('newchildkey') 

p.childrenKeys.append('newchildkey') 

append()戻りNonep.childrenKeysに割り当てることができない、これを元に戻し

class Parent(db.Model): 
    childrenKeys = db.ListProperty(str,indexed=False,default=[]) 

p = Parent.get_or_insert('somekey') 
p.childrenKeys.append('newchkey') 
p.put() 
+0

いずれにせよ、 'ListProperty(str)'ではなく 'StringListProperty'が必要です。 (これがうまくいく場合は、最近のSDKで変更されている可能性があります)。 – geoffspear

答えて

8

あなたがp.childrenKeys割り当てを削除する必要があります。

5

+0

ドクターが言うように空のリストを返すとは思いませんか? Pythonの空のリストはNoneに相当するものではありませんか? – ofko

+2

p.childrenKeysは空のリストを返します。 p.childrenKeys.append()は、リストのappend()メソッドの動作であるため、Noneを返します。ここでの問題は、Noneをp.childrenKeysに割り当てたことです。これはListPropertyでは許可されていません。 (空のリストをListPropertyに割り当てることができます。ListPropertyはデータストア内でその名前のプロパティを持たないことで表されます) –

+0

これを説明してくれてありがとう、今すぐ取得します。 – ofko

関連する問題