我在Django中有一个非常奇怪的错误。
我的查询集如下:
return (
Post.objects
.select_related(
'channel',
)
.prefetch_related(
Prefetch('poll', queryset=(
Poll.objects.prefetch_related('choice_set')
)),
Prefetch('author__profile', queryset=(
UserProfile.objects
.prefetch_related(
Prefetch('major', queryset=Major.objects.only('name')),
Prefetch('university', queryset=University.objects.only(
'longname',
)),
)
.only(
...
)
)),
)
.only(
...
)
)
现在,当我运行Django dev服务器并且我直接进入这个视图时,它第一次工作,对象是正确的。下次,它失败了:
AttributeError: Cannot find ‘author’ on UserProfile_Deferred_campaign_id_city_id_country8db75c0f1ddc0935cac6f1c9c2d0cda2 object, ‘author__profile__major’ is an invalid parameter to prefetch_related()
同样的事情是单元测试,如果首先运行此视图的测试,它运行,当我运行所有测试时,它失败(并且它不是第一次)。
我做错了什么?在第一次和第二次尝试之间没有创建新对象。