反向外键Django的FTS模板搜索模式
-
16-09-2019 - |
题
我有一双Django模型的带有外键,其中之一是可搜索与django的-FTS,说:
class Foo(models.Model):
...
class Bar(fts.SearchableModel):
foo = models.ForeignKey(Foo)
当我有富的一个实例,考虑到我可以插入print foo.bar_set.all()
和我看到的结果的数组。然而,如果我尝试使用它在视图,在任何以下方式:
{{foo.bar_set|pprint}}
{{foo.bar_set.all|ppring}}
{{foo.bar_set.count}}
{{foo.bar_set.all|length}}
{% for bar in foo.bar_set.all %} {{bar}} {% endfor %}
和字面上任何构建仿佛foo
实例没有bar_set
属性我能想到的行为的。
编辑:我相信,我有一个Foo
实例在模板中,我测试了以下按预期方式工作:
{{foo|pprint}}
{{foo.id}} (and any other simple attributes of Foo)
我肯定有相关的酒吧对象,我检查从视图(print foo.bar_set.all()
)。并且如果查询集是空的,{{foo.bar_set.all|pprint}}
将产生[]
,不''
(其中它不上{{foo.bar_set.all|pprint}}
,{{foo.bar_set|pprint}}
,和任何{{foo.nonexistent_attribute|pprint}}
)。
此行为开始时,我感动从SQLite数据库发展到PostgreSQL,与psycopg2驱动程序,使用Django的FTS全文检索。
我找不到任何其他的答案,因为谷歌搜索,这是非常困难:“反向关系”或“反向外键”的所有充斥着无关django.core.urlresolvers.reverse
引用,我不知道如何来命名“* _set”的事谷歌。关于如何谷歌这一个提示将是有益的为好。
解决方案
感谢的马尔辛 - Kaszyński帮助关闭SO我设法追查错误下来到 Django的FTS BaseManager。 Django的FTS是一个全文搜索引擎,增加了.search(query)
方法来搜索类的经理,共同我可以写Foo.objects.search("bar")
。对于方便,它增加了__call__
方法给管理器,其通过RelatedManager
(例如其是bar_set
)。
在模板代码,在django.templates.Variable._resolve_lookup
方法,看到的是bar_set
是可调用(线717),尝试不带参数(线722)调用它,并且把该变量作为空的,因为参数被要求(线724-726)。
其他提示
{{ foo.bar_set.all }}
一定要工作。你确定你确实有富的实例?
我建议尝试通过foo.bar_set.all可以在视图功能的字典元素渲染页面,看看你会得到相同的结果之前。