Django queryset返回不正确的数据?

时间:2013-01-06 13:59:57

标签: django google-app-engine django-forms django-queryset django-nonrel

我的设置是在Google App Engine上运行的Django-Nonrel

我有一个LessonStep内联模型\表单的Lesson模型\表单。连接是通过LessonStep中的外键指向Lesson。 我正在使用save_related,这样一旦保存了Lesson表单,以及所有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管理表单添加一个新的并保存,然后调用此函数。接下来发生的是,实例确实保存在数据库中,但form.instance.lessonstep_set.all())返回查询集。日志记录打印为inlines: 0

显然数据存在,因为当更新的管理表单出现时,它有新的LessonStep实例。

我的问题:

即使数据刚刚通过super保存,查询集如何返回为空? 是否有更好的方法来保存刚保存的模型的已保存内联实例?

更多信息 - 如果我在记录行上放置一个断点并评估查询,我会得到一个返回正确查询集的结果。所以我觉得这与Django缓存或查询的上下文有关。

1 个答案:

答案 0 :(得分:1)

Django(我没有非rel的经验)缓存相关对象的查询集。您可以通过从数据库中重新获取实例来避免这种情况。

instance = Lesson.objects.get(pk=form.instance.id)
len(instance.lessonstep_set.all())