0

私のセットアップは、Google App Engine で実行されている Django-Nonrel です。

LessonStep インライン モデル\フォームを持つレッスン モデル\フォームがあります。接続は、レッスンを指す LessonStep の外部キーを介して行われます。save_relatedレッスン フォームがすべての LessonStep インライン フォームと共に保存されると、インライン モデルでデータ操作を実行できるように使用しています。

これは私のコードです:

    def save_related(self, request, form, formsets, change):
        super(LessonAdmin,self).save_related(request, form, formsets, change)
        logging.debug("inlines: %d" % (len(form.instance.lessonstep_set.all()),)  )

問題はこれです:

私のレッスン フォームに LessonStep インスタンスがないと仮定しましょう。Django 管理フォームから新しいものを追加して保存すると、この関数が呼び出されます。次に何が起こるかというと、インスタンスは実際に DB に保存されますが、空のクエリセットがform.instance.lessonstep_set.all())返されます。ロギングプリントは次のように出力されますinlines: 0

更新された管理フォームが表示されると、新しい LessonStep インスタンスが表示されるため、明らかにデータはそこにあります。

私の質問:

を介してデータが保存されたばかりなのに、クエリセットが空を返すのはsuperなぜですか? 保存されたばかりのモデルの保存されたインライン インスタンスに到達するためのより良い方法はありますか?

詳細 - ログ行にブレークポイントを設定してクエリを評価すると、適切なクエリセットが返された結果が得られます。したがって、これは Django のキャッシングまたはクエリのコンテキストと関係があると感じています。

4

1 に答える 1

1

Django (非 rel の経験はありません) は、関連オブジェクトのクエリセットをキャッシュします。これは、データベースからインスタンスを再フェッチすることで回避できます。

instance = Lesson.objects.get(pk=form.instance.id)
len(instance.lessonstep_set.all())
于 2013-01-06T18:27:40.173 に答える