我有一双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)。

从卸下__call__方法的django-FTS' BaseManager 帮助。

其他提示

{{ foo.bar_set.all }}一定要工作。你确定你确实有富的实例?

我建议尝试通过foo.bar_set.all可以在视图功能的字典元素渲染页面,看看你会得到相同的结果之前。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top