Django:Filter()没有返回任何内容

时间:2011-04-14 23:35:53

标签: python django filter

当我尝试使用get()时,它会给我一个多个对象返回的错误。我尝试过滤器,它绝对没有返回。这是我的代码:

latest_poll_list = Score.objects.filter(user=user.id)

它不返回任何东西。希望这只是一个语法错误;不是我必须重新编写程序的错误。提前谢谢。

得到:

Environment:


Request Method: GET
Request URL: http://localhost:8000/scores/

Django Version: 1.3
Python Version: 2.5.5
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'es']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/usr/local/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Users/julian/Documents/EpicScore/es/views.py" in scoreindex
  30.     latest_poll_list = Score.objects.get(user=request.user)
File "/usr/local/lib/python2.5/site-packages/django/db/models/manager.py" in get
  132.         return self.get_query_set().get(*args, **kwargs)
File "/usr/local/lib/python2.5/site-packages/django/db/models/query.py" in get
  351.                 % (self.model._meta.object_name, num, kwargs))

Exception Type: MultipleObjectsReturned at /scores/
Exception Value: get() returned more than one Score -- it returned 3! Lookup parameters were     {'user': <User: jmeyer>}

3 个答案:

答案 0 :(得分:4)

追溯中的get来电与您问题中的filter来电不等:

latest_poll_list = Score.objects.get(user=request.user)
    !=
latest_poll_list = Score.objects.filter(user=user.id)

在第一个传递对象时,user作为参数,在第二个传递id值(可能是整数)。此外,如果没有看到您的其余代码,我们就不知道userrequest.user是否相同。

如果你只是为get交换filter,那么你应该得到预期的结果:

latest_poll_list = Score.objects.filter(user=request.user)

否则你可以这样做:

latest_poll_list = Score.objects.filter(user__id=request.user.id)

如果您传入user对象,则查询会在内部将user.id与数据库列user_id进行比较,这是ForeignKey的数据实际存储的方式。

答案 1 :(得分:1)

您有一个损坏的数据集,或者您的模型可能不像您认为的那样工作。不知何故,你设法使用户不是得分的唯一标识符。

至于为什么过滤器没有返回任何东西,也许是因为你用不同的方式调用它?

filter(user=user.id)

VS

get(user=request.user)

这让我相信用户是一个由django自动处理的远程密钥,而不是原始数字。您对过滤器的使用是使用原始数字,您对get的使用是使用更惯用的对象关系方式。

答案 2 :(得分:0)

如果Score表的user字段是User表的ForeignKey,并且您的局部变量user也是{{1}然后你应该做

User