1

私は GAE データベースを使用して、SuppSet の一部であるタイプ Supp のオブジェクトを格納しています。SuppSet には多数の Supp を含めることができます。次のように、ReferenceProperty モデルを使用して、SuppSet と Supps の間に 1 対多の関係を作成しています。

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にプッシュしようとしましたが、うまくいきませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

2
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
于 2011-02-11T03:34:24.240 に答える