字段可通过Django shell获得,但不能通过Web应用程序获得

时间:2011-11-01 18:31:25

标签: django django-queryset

在网页上,我收到以下错误:

FieldError at /foo/bar/
Cannot resolve keyword 'foos' into field. Choices are: __unused__, [snip]

问题代码是

User.objects.filter(foos__name='bar')

当我在shell中运行它时,它可以工作,我得到一个记录集:

>>> User.objects.filter(foos__name='bar')
[<User: JordanReiter>]

但是在网页上我得到了上述例外。

我之前从未遇到过这个问题,我想知道我是否遗漏了什么?

更新

基于在Web上和shell中的“Choices are:...”之间做差异,如果我在网上进行查询,那么shell中有7个可用的字段是不可用的。它们似乎是指向User的普通ForeignKey字段,与其他有效字段没有区别。

远远测试

  • INSTALLED_APPS对于两种设置都相同
  • runserver版本也有效(正如预期的那样)
  • 使用的
  • User在两种情况下都相同,并且是django.contrib.auth.models.User
  • shell的用户和网络应用的用户的相关名称肯定不同。 shell中的User._meta.get_all_related_objects()显示大约7个相关字段,而不是从Web应用程序中转储的字段。
  • 设置的值也基本相同(一个设置为TEST_XYZ,但这些设置不会影响任何内容)

2 个答案:

答案 0 :(得分:1)

这只是一种答案。原来该字段不可用的原因是因为所有已安装的应用程序的模型在首次编译应用程序时未正确加载,因此应用程序永久认为某些字段不存在,即使他们识别出模型那些领域确实存在。它似乎与之前同样令人困惑的问题有关:

SO: Internal Server error on the first request (and only the first request) after server reload

哦,所以我修复它的方法是更改​​导入Web服务器在第一次请求时找不到的模型的代码区域。不知何故,省略那些意味着服务器会识别出有问题的字段存在。超级怪异!

答案 1 :(得分:0)

反向外键仅在其所在的应用程序位于INSTALLED_APPS时添加到模型中。我知道你说你的settings.py与开发中的相同,但不知何故,你的foo应用程序在本地INSTALLED_APPS,但在服务器上却没有。你有一个local_settings覆盖吗?