django haystack unable to remove stale records - AttributeError: Nonetype object has no attribute '_meta'

django haystack unable to remove stale records - AttributeError: Nonetype object has no attribute '_meta'

我正在使用带有 elasticsearch 和 django 1.8.11 的 django-haystack 2.4.1 版本 我在使用删除参数更新索引时遇到问题。如果我的一些模型被删除然后如果我 运行

./manage.py update_index --remove

我收到错误 AttributeError: Nonetype object has no attribute '_meta'

我检查了跟踪,发现错误来自 default_get_identifier 方法

default_get_identifier
    return u"%s.%s" % (get_model_ct(obj_or_string),

这里由于模型已经删除,get_model_ct returns属性错误

然后我发现了HAYSTACK_IDENTIFIER_METHOD这个参数,所以我想到了定义我自己的方法,下面会提到

def getHaystackIdentifier(obj_or_string):
    return (str(obj_or_string)+"."+str(obj_or_string._get_pk_val()))

但基本问题仍然存在,因为 obj_or_string 模型已从数据库中删除,

如何获取陈旧记录的标识符并将其从索引中删除?

如果没有找到对应的模型,haystack不应该自动删除记录吗?我不确定我是否遗漏了什么

我能够解决这个问题。问题是 HAYSTACK_ID_FIELD 在 django 设置文件中定义,因为我的字段名称 (id) 与默认的 haystack 字段冲突。 http://django-haystack.readthedocs.io/en/v2.4.1/settings.html#haystack-id-field

我将我的字段名称更改为其他名称并删除了此设置,一切似乎都运行良好。请注意,即使我更改了我的字段名称但不从设置文件中删除此条目,它仍然会给我错误。

在此处检查 github 问题上此错误的完整跟踪 https://github.com/django-haystack/django-haystack/issues/1380