GAE python - как изменить «один», на который указывает «много» объекта? - PullRequest
1 голос
/ 11 февраля 2011

Я использую базу данных 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')

Я могу удалить Supp из исходного SuppSet , но я не могу понять, как изменить SuppSet , на который указывает Supp .Я попробовал следующее безуспешно:

q = SuppSet.gql("WHERE name = :1", name_of_the_new_SuppSet)
s = q.get()
supp.suppset = s

Я также пытался использовать манипуляции list , чтобы вставить Supp в новый SuppSet's collection_list supp_list , который не работал.

Любая помощь очень ценится.

1 Ответ

2 голосов
/ 11 февраля 2011
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
...