【发布时间】:2010-03-30 17:05:08
【问题描述】:
我有一个类似于以下内容的模型文件:
class WithDate(models.Model):
addedDate = models.DateTimeField(auto_now_add=True)
modifiedDate = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Match(WithDate):
...
class MatchFilter(django_filters.FilterSet):
class Meta:
model = Match
class Notify(WithDate):
matchId = models.ForeignKey(Match)
headline = models.CharField(null=True, blank=True, max_length=10)
对于每场比赛,我都在尝试计算有标题的通知记录。所以我的电话看起来像
matchObjs = Match.objects.annotate(notifies_made=Count('notify__headline__isnull'))
这会不断抛出 FieldError。我已将查询简化为
matchObjs = Match.objects.annotate(notifies_made=Count('notify'))
而且我仍然得到相同的 FieldError...我在其他情况下看到了这项工作(其他文档,其他 SO 问题,如 this one),但我不知道为什么会出现错误。
返回的具体错误如下:
无法将关键字“通知”解析为字段。选择有:(Match 模型中的所有字段)
有没有人知道为什么我不能让这个注释跨表工作?在查看了其他 SO 问题和我见过的各种 Django 文档后,我感到很困惑。
编辑:我使用的是 Django 1.1.1
编辑 2:我尝试将 matchId 字段重命名为仅匹配...并且我已经消除了 WithDate 类,将 addedDate 和 modifiedDate 直接添加到模型类定义中。这些更改都没有消除错误消息。
编辑 3:在重建我的模型文件后,我意识到包含 Alex Gaynor 的 django-filter 插件会导致问题。起初我认为这无关紧要,但既然现在如此,我已经包含了导致错误的 Match FilterSet 类。当我删除 MatchFilter 类时,它工作得很好。我正在尝试通过 django-filter 代码找出发生这种情况的原因,但如果其他人有想法,我会非常感兴趣!
【问题讨论】:
-
与你的问题无关,但
MatchFilter有缩进错误。 -
哎呀,文本框传输的代码没有我想象的那么干净。感谢您指出了这一点。现在应该修好了!
标签: django orm django-filter