【发布时间】:2011-12-30 15:49:11
【问题描述】:
在related (as yet unanswered) question 之后,我做了一些调查,发现 Django Haystack 的RealTimeSearchIndex 的当前实现没有尝试更新相关字段(多对多)的更改。我认为这很容易解决 - 毕竟,我可以像这样扩展 RealTimeSearchIndex:
class RealTimeM2MSearchIndex(RealTimeSearchIndex):
def _setup_save(self, model):
signals.m2m_changed.connect(self.update_object, sender=model)
signals.post_save.connect(self.update_object, sender=model)
但后来我意识到(或至少假设,因为它不起作用)只有在模型本身定义了 M2M 字段时才有效,而不是在 M2M 关系的“反向”方面。为了解决这个问题,我做了如下的事情:
signals.m2m_changed.connect(self.update_object, sender=model.related_field.through)
其中related_field 是ManyToMany 定义另一侧的特定模型的名称。奇怪的是,在运行时,Django 然后抱怨模型没有这样的字段,related_field。
果然,如果我检查对象,Django 还没有扩展模型以拥有related_field 字段。但是,如果我在显示视图时检查同一个对象,它确实有 related_field。
总结
所以问题似乎在于,当 Haystack 运行其代码时,Django 将属性添加到 M2M 关系的反面的自动行为尚未发生。我怎样才能克服这个障碍,让 Haystack 的 RealTimeSearchIndex 也能更新相关字段的变化?
【问题讨论】:
标签: django many-to-many django-haystack