说,我有一个具有以下定义的用户模型:
class User(models.Model):
username = models.CharField(max_length=30, unique=True)
email = models.EmailField(max_length=255)
first_name = models.CharField(max_length=30, blank=True, default='')
last_name = models.CharField(max_length=30, blank=True, default='')
user_role = models.IntegerField(choices=USER_CHOICES, default=USER_ROLE)
现在,我想为用户创建两个单独的索引:AdminUserIndex和UserIndex,每个索引具有不同的字段和配置集,但派生自相同的用户模型。
根据文档和测试,Haystack与指定模型具有一对一映射,因此这似乎不可能。
所以,一种方法是在同一个索引中添加所有配置并根据需要过滤它们,还有其他更清洁的方法,我不必混合它们中的两个吗?
感谢您提前回复!
答案 0 :(得分:2)
我一直在寻找这个问题的答案,并且我已经尝试过遵循Haystack给我的错误的建议。
首先,它绝对不可能在同一个连接上有多个索引(记录在案)。但是,错误消息意味着我可以排除索引。在你的情况下,这将是:
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://localhost:9001/solr/default',
'EXCLUDE_INDEXES': ['path.to.AdminUserIndex'],
},
'admin': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'PATH': 'http://localhost:9001/solr/default',
'EXCLUDE_INDEXES': ['path.to.UserIndex'],
},
}
然而,Haystack调用unified_index.get_index(model)
,即使在两个连接中也找到相同的模型,所以这似乎也是一个禁忌。
虽然我无法回答它是不可能的,但我认为大多数明显的途径都被排除在外。
在阅读了这篇文章之后,似乎你可以通过使用proxy model来欺骗Haystack。有关Haystack的github问题,请参阅this issue。