【问题标题】:Query works in shell but not in browser查询在 shell 中有效,但在浏览器中无效
【发布时间】:2012-10-01 03:33:48
【问题描述】:

我在视图中有这个查询:

def metas (request, pipol_id):
  pipol = Personas.objects.get(pk=pipol_id).evidencias_set.all().exclude(calidad=1)
  return render_to_response ( 'metas/metas.html', {'pipol': pipol} )

当我在 shell 中测试这段代码时:

pipol_id = u'3'
pipol = Personas.objects.get(pk=pipol_id).evidencias_set.all().exclude(calidad=1)
pipol.count()
Out[8]: 45
pipol = Personas.objects.get(pk=pipol_id).evidencias_set.all()
pipol.count()
Out[10]: 46

查询按预期工作(我有一个evidenciacalidad=1

但是当我在我的模板中尝试时,我没有得到任何数据。

这是urls.py

url (r'^(?P<pipol_id>\d+)/$', 'metas'), 

网址是这样的:http://localhost:8000/metas/3/

没有错误,只是一个空的 QuerySet。我错过了什么?

提前致谢。

【问题讨论】:

  • 模板可能有问题。有没有在视图中设置断点,加载页面时看到pipol.count()为0?
  • 你解决过这个问题吗?因为我今天遇到了它。

标签: django django-queryset


【解决方案1】:

在您的 shell 中,您使用 3 的值为 pipol_id,而在浏览器中,您正在尝试使用值 1

Personas id 为 1 的对象在 evidencias_set 中可能没有任何内容。

【讨论】:

  • 其实不管用什么值,总是得到一个空的QuerySet。我将更改示例以反映这一事实。
  • 是否都使用相同的数据库?有缓存吗?还要检查views.py中是否有多个同名metas的视图函数。
  • 是的,站点和 shell 在 SQLite 中使用相同的数据库。
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 2020-11-10
相关资源
最近更新 更多