1

(もっといいタイトルが思いつきませんでした :S )

そのため、最近 db から ndb に変更しましたが、一部が機能しません。このチュートリアル モデルにはチャプターがあるので、「ndb.StructuredProperty」を使用してモデルのチャプターをチュートリアルに関連付けています。問題なくチュートリアルと章を作成できますが、章をチュートリアルに向けることはできません。

チュートリアル モデル:

class Tutorial(ndb.Model):
    title = ndb.StringProperty(required=True)
    presentation = ndb.TextProperty(required=True)
    extra1 = ndb.TextProperty()
    extra2 = ndb.TextProperty()
    extra3 = ndb.TextProperty()
    tags = ndb.StringProperty(repeated=True)
    votes = ndb.IntegerProperty()
    created = ndb.DateTimeProperty(auto_now_add=True)
    last_modified = ndb.DateTimeProperty(auto_now=True)
    chapters = ndb.StructuredProperty(Chapter, repeated=True)

編集クラス:

class EditTut(FuHandler):
    def get(self):
        ...
        ...

    def post(self):
        editMode = self.request.get('edit')

        if editMode == '2':
            ...
            ...

        elif editMode == '1':
            tutID = self.request.cookies.get('tut_id', '')
            tutorial = ndb.Key('Tutorial', tutID)
            title = self.request.get("chapTitle")
            content = self.request.get("content")
            note = self.request.get("note")

            chap = Chapter(title=title, content=content, note=note)
            chap.put()
            tutorialInstance = tutorial.get()
            tutorialInstance.chapters = chap
            tutorialInstance.put()

            self.redirect('/editTut?edit=%s' % '0')
        else:
            self.redirect('/editTut?edit=%s' % '1')

このコードを使用してチュートリアルが作成されますが、次のエラーが発生します。

tutorialInstance.chapters = chap
AttributeError: 'NoneType' object has no attribute 'chapters'
4

3 に答える 3

2

あなたは混乱しているようです。を使用する場合StructuredProperty、含まれるオブジェクトには独自の ID またはキーがありません。これは、外側のオブジェクトに変な名前のプロパティが追加されているだけです。おそらく、本の中にすべての章が含まれているのではなく、本をその章に繰り返しKeyProperty リンクしたいですか? どちらかを選択する必要があります。

于 2013-02-01T18:09:13.970 に答える
1

あなたはリストを扱っています...リストにオブジェクトを追加する必要があります

tutorialInstance.chapters.append(chap)
于 2013-01-30T20:45:19.537 に答える
1

更新: @nizz の助けを借りて、

tutorialInstance = tutorial.get()
tutorialInstance.chapters = chap

に:

tutorialInstance = ndb.Key('Tutorial', int(tutID)).get()
tutorialInstance.chapters.append(chap)

完璧に機能しました。

于 2013-01-30T20:19:18.627 に答える