2012-01-28 15 views
5

Sanırım zihnimi kaybediyorum, neden aşağıdaki iş yok? App Engine, ListProperty'ye öğeleri ekliyor

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.

Yani yolu ben varsayılan (boş liste) alıyorum, görmek ve ekleme

:

BadValueError: Property childrenKeys is required 

doc diyor ki:

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() 

bu hatayı alıyorum ona yeni bir değer ve onu kaydetme. Bununla

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

:

p.childrenKeys.append('newchildkey') 

append() döner None, p.childrenKeys tahsis edilemez bu Değiştir

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

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

Muhtemelen her durumda 'ListProperty (str)' yerine bir 'StringListProperty' isteyebilirsiniz. (Her ne kadar bu sizin için işe yarıyorsa da, son zamanlarda SDK eşdeğer olan bir şey değişmiş olabilir). – geoffspear

cevap

5

:

+0

Dokümanın dediği gibi boş bir liste döndürmüyor mu? Python'daki boş liste, Yok'a eşdeğer olamaz, değil mi? – ofko

+2

p.childrenKeys boş bir liste döndürüyor. p.childrenKeys.append() None değerini döndürür, çünkü bu bir listenin append() yönteminin davranışıdır. Buradaki sorun, ListProperty tarafından izin verilmeyen p.childrenKeys için Hiçbiri'nin atanmasıydı. (Boş bir listeyi, bu ismin hiçbir özelliğine sahip olmadan temsil edilen bir ListProperty öğesine atayabilirsiniz.) –

+0

tamam, bunu şimdi anladığımı açıkladığın için teşekkürler. – ofko