我正在尝试按照文档查找跨越“反向”关系关系的查找,找到here。这是我的型号代码:
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:无法将关键字'foo'解析为字段。选项包括:_message_set,date_joined,email,first_name,groups,id,is_active,is_staff,is_superuser,last_login,last_name,logentry,password,user_permissions,username
但是,如果我将我的代码更改为不使用User,而是使用我自己的模型类型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)
...
有人可以向我解释使用User模型作为外键的第一个代码的问题吗?提前谢谢!
编辑:我应该澄清我的查询代码不在视图函数中,而是在我使用manage.py命令调用的实用程序函数中。如果我将查询代码放在视图中,那么一切正常,没有错误!但奇怪的是,第二个代码示例在视图和管理命令方案中都能正常工作。希望有一些比我更多Django专业知识的人可以解释这一点。谢谢!
答案 0 :(得分:3)
好的,问题解决了!这似乎是导致这个问题的一个令人难以置信的微小细节,我不能说我完全理解为什么它表现得像它一样,但是这里有:
我的models.py顶部有from django.contrib.auth.admin import UserAdmin
,还有我的其他导入语句。这实际上是在我将管理员资源重构为自己的admin.py之前遗留下来的,所以在models.py中根本没有使用UserAdmin导入。我注释掉了这个未使用的语句,然后做了一个syncdb并且在一个冲突的反向查询名称上得到了一个模型验证错误(这是我的用户配置文件模型中的ForeignKey字段,但不是我在原始问题中无法查询的模型)。所以我在该字段中添加了一个related_name参数,执行了一个syncdb,执行了之前发出错误的原始查询,并且一切都没有错误!
所以最后它归结为一个错误的from django.contrib.auth.admin import UserAdmin
。
感谢所有响应的人!#/ p>