2012-01-28 27 views
5

Tôi nghĩ rằng tôi đang mất trí, tại sao không làm công việc sau đây?App Engine chắp thêm các mục vào 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() 

tôi nhận được lỗi này:

BadValueError: Property childrenKeys is required 

Các doc nói:

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.

Vì vậy, cách tôi nhìn thấy nó, tôi nhận được mặc định (một danh sách trống) và phụ một giá trị mới cho nó và lưu nó.

+0

bạn có thể muốn có một 'StringListProperty' thay vì' ListProperty (str) ', trong mọi trường hợp. (Mặc dù nếu điều này làm việc cho bạn ở tất cả, một cái gì đó có thể đã thay đổi trong một SDK gần đây mà làm cho chúng tương đương). – geoffspear

Trả lời

8

Bạn nên loại bỏ các p.childrenKeys công việc:

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

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

Thay thế này:

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

với điều này:

p.childrenKeys.append('newchildkey') 

append() lợi nhuận None, mà không thể được gán cho p.childrenKeys .

+0

Không phải là giả sử trả lại một danh sách trống như tài liệu nói? Nó không thể là danh sách trống trong Python tương đương với Không, có phải không? – ofko

+2

p.childrenKeys trả về một danh sách trống. p.childrenKeys.append() trả về None, vì đó là hành vi của phương thức append() của một danh sách. Vấn đề ở đây là việc gán None cho p.childrenKeys, không được ListProperty cho phép. (Bạn có thể gán danh sách trống cho một ListProperty, mà trong kho dữ liệu được đại diện bởi không có thuộc tính của tên đó.) –

+0

ok cảm ơn vì đã giải thích rằng, tôi nhận được nó ngay bây giờ. – ofko