django haystack无法删除陈旧记录 - AttributeError:Nonetype对象没有属性'_meta'

时间:2016-06-06 09:49:36

标签: django elasticsearch django-haystack

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

./manage.py update_index --remove

我收到错误 AttributeError:Nonetype对象没有属性'_meta'

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

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

此处已删除模型,get_model_ct将返回属性错误。

然后我发现了 HAYSTACK_IDENTIFIER_METHOD 参数,所以我考虑定义自己的方法,如下所述

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

但基本问题仍然与 obj_or_string 模型已从数据库中删除相同,

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

如果找不到与之相对应的模型,是否应该不会干草堆自动删除记录?我不确定我是否遗漏了一些东西

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题。问题是在django设置文件中定义的HAYSTACK_ID_FIELD,因为我的字段名称(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