我正在使用GAE数据库存储Supp类型的对象,这些对象属于SuppSet。一个SuppSet可以包含许多Supps。我正在使用ReferenceProperty模型在SuppSet和Supps之间创建一对多关系,如下所示:
class SuppSet(db.Model):
<stuff>
class Supp(db.Model):
<more stuff>
suppset = db.ReferenceProperty(SuppSet, collection_name='supp_list')
我可以从其原始SuppSet中删除Supp,但是我不知道如何更改Supp指向的SuppSet。我尝试了以下失败的尝试:
q = SuppSet.gql("WHERE name = :1", name_of_the_new_SuppSet)
s = q.get()
supp.suppset = s
我还尝试了使用列表操作将Supp推送到新的SuppSet的collection_list supp_list中,该方法不起作用。
任何帮助深表感谢。
最佳答案
from google.appengine.ext import db
class SuppSet(db.Model):
name = db.StringProperty()
class Supp(db.Model):
suppset = db.ReferenceProperty(SuppSet, collection_name='supp_list')
suppSet0, suppSet1 = SuppSet(name = '0'), SuppSet(name = '1')
suppSet0.put()
suppSet1.put()
supp = Supp(suppset=suppSet0)
supp.put()
print 'suppSet0.supp_list: %r' % list(suppSet0.supp_list)
print 'suppSet1.supp_list: %r' % list(suppSet1.supp_list)
print 'suppset for sup: %s' % supp.suppset.name
supp.suppset = suppSet1
supp.put()
print 'suppSet0.supp_list: %r' % list(suppSet0.supp_list)
print 'suppSet1.supp_list: %r' % list(suppSet1.supp_list)
print 'suppset for sup: %s' % supp.suppset.name
在交互式控制台中工作正常:
suppSet0.supp_list: [<__main__.Supp object at 0x42a0f10>]
suppSet1.supp_list: []
suppset for sup: 0
suppSet0.supp_list: []
suppSet1.supp_list: [<__main__.Supp object at 0x429a3d0>]
suppset for sup: 1
关于python - GAE python-如何更改“许多”对象指向的“一个”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4965033/