2011-06-20 50 views
1

我试图按照文档查找跨越“反向”关系的关系,找到here。这里是我的模型代码:Django“跨越关系的查找”错误

class Foo(models.Model): 
    initiator = models.ForeignKey(User) 
    date_time = models.DateTimeField() 
    ... 

,这里是我的查询代码:

... 
now = datetime.now() 
users = User.objects.filter(foo__date_time__gte = now) 
... 

这将导致以下错误:django.core.exceptions.FieldError:无法解析的关键字“富”成领域。选项包括:_message_set,date_joined,电子邮件,FIRST_NAME,组ID,IS_ACTIVE,is_staff,is_superuser,LAST_LOGIN,姓氏,logentry,密码,user_permissions,用户名

但是,如果我改变我的代码,不使用的用户,但而是使用我自己的模型类型Bar,然后按我所期望的那样工作,没有任何错误。示例如下:

class Foo(models.Model): 
    initiator = models.ForeignKey(Bar) 
    date_time = models.DateTimeField() 
    ... 

... 
now = datetime.now() 
bars = Bar.objects.filter(foo__date_time__gte = now) 
... 

任何人都可以向我解释第一个代码使用用户模型作为外键的问题吗?提前致谢!

编辑:我应该说明我的查询代码不是在视图函数中,而是在我使用manage.py命令调用的效用函数中。如果我把查询代码放在视图中,那么一切正常,没有错误!但奇怪的是,第二个代码示例在视图和管理命令场景中都能正常工作。

希望有人比我有更多的Django专业知识可以解释这一点。谢谢!

+0

您是否已将'Foo'定义的应用程序添加到'INSTALLED_APPS'中? –

+0

感谢您的回复Daniel。是的,我的应用程序在INSTALLED_APPS。我编辑了我原来的帖子,以澄清这段代码不在视图函数内,这似乎有所作为,虽然我不太清楚为什么。 – Blade

回答

3

好的,问题解决了!这似乎是一个令人难以置信的细节导致这个问题,我不能说我完全理解为什么它表现得像它那样,但是这里有:

我有from django.contrib.auth.admin import UserAdmin在我的models.py的顶部与我的其他进口报表。这实际上是在将我的管理员重构为自己的admin.py之前剩下的,因此UserAdmin导入在models.py中根本没有被使用。我注释掉了这个未使用的语句,然后做了一个syncdb,并在反向查询名称上发生了模型验证错误(这是在我的用户配置文件模型中的ForeignKey字段中,但不是我在原始问题中无法查询的模型)。所以我给这个字段添加了一个related_name参数,做了一个syncdb,执行了我之前提供错误的原始查询,并且所有的工作都没有错误!

所以最终它归结为一个错误from django.contrib.auth.admin import UserAdmin

非常感谢所有回应帮助的人!