Django 1.8.13 queryset工作一次,然后失败

时间:2016-06-23 10:54:01

标签: python django

我在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()

同样的事情是单元测试,如果首先运行此视图的测试,它运行,当我运行所有测试时,它失败(并且它不是第一次)。

我做错了什么?在第一次和第二次尝试之间没有创建新对象。

1 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,这与在1.9 - https://code.djangoproject.com/ticket/24873中修复的错误有关。