Django QuerySet奇怪行为:为First和Last元素返回相同的对象

时间:2014-01-29 03:57:50

标签: python django django-models django-queryset

这是我的模特:

class Film(models.Model):
    filmmaker = models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length=250)

在我看来,用户可以从下拉列表中选择一部电影并查看该电影的详细信息。

我的观点:

@login_required()
def home(request):

    movies = Film.objects.filter(filmmaker=request.user)

    # I added the following to debug. Assume there are 4 elements in the queryset
    print movies[0].title, movies[3].title
    print movies[1].title, movies[2].title

    ...

控制台输出是错误的:

title1 title1
title2 title3

但是,当我运行manage.py shell并手动创建查询集时,

>>> movies = Film.objects.filter(filmmaker__email='email@email.com')
>>> print movies[0].title, movies[3].title
>>> print movies[1].title, movies[2].title

输出符合预期:

title1 title4
title2 title3

这里发生了什么?我哪里错了?我该怎么办才能修复它?似乎无法理解这种奇怪的行为

1 个答案:

答案 0 :(得分:2)

如果没有看到整体数据库结构和数据,我认为我不能帮助你。

但有一点需要注意的是,在第一个实例中,您基于请求对象进行查询,而第二个实例则是根据电子邮件地址进行查询。

也许在查询之前,首先尝试详细说明request.user对象,然后查看name / email / etc是否符合您的预期。