django-haystack - 在索引中添加新字段导致错误后更新索引

时间:2011-12-13 09:22:50

标签: django django-haystack

我有一个django网站,它使用Haystack和Xapian后端进行搜索索引。我为其中一个被索引的模型添加了一个新字段,然后将该字段添加到该模型的SearchIndex中。我跑了:

python manage.py update_index

要更新索引,但我收到以下错误:

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.6/dist-packages/django_haystack-1.0.1_final-py2.6.egg/haystack/management/commands/update_index.py", line 51, in handle
    self.handle_app(None, **options)
  File "/usr/local/lib/python2.6/dist-packages/django_haystack-1.0.1_final-py2.6.egg/haystack/management/commands/update_index.py", line 107, in handle_app
    index.backend.update(index, small_cache_qs[start:end])
  File "/usr/local/lib/python2.6/dist-packages/xapian_haystack-1.1.3beta-py2.6.egg/xapian_backend.py", line 204, in update
    data = index.prepare(obj)
  File "/usr/local/lib/python2.6/dist-packages/django_haystack-1.0.1_final-py2.6.egg/haystack/indexes.py", line 102, in prepare
    self.prepared_data[field_name] = field.prepare(obj)
  File "/usr/local/lib/python2.6/dist-packages/django_haystack-1.0.1_final-py2.6.egg/haystack/fields.py", line 119, in prepare
    return self.convert(super(CharField, self).prepare(obj))
  File "/usr/local/lib/python2.6/dist-packages/django_haystack-1.0.1_final-py2.6.egg/haystack/fields.py", line 75, in prepare
    raise SearchFieldError("The model '%s' has an empty model_attr '%s' and doesn't allow a default or null value." % (repr(current_object), attr))
haystack.exceptions.SearchFieldError: The model 'None' has an empty model_attr 'address_county' and doesn't allow a default or null value.

我使用的版本是django 1.2和django-haystack 1.0.1。目前不能将这些版本升级到最新版本。

2 个答案:

答案 0 :(得分:11)

我找到了答案。线索出现在错误信息中(我们都知道,这并不总是发生!):

The model 'None' has an empty model_attr 'address_county' and doesn't allow a default or null value.

我的模型字段已使用blank=True, null=True创建。这导致了错误,所以我删除了那些并添加了default='',这使我能够更新索引而没有错误。希望这有时可以帮助某人!

答案 1 :(得分:0)

索引我的模态电话字段时,我面临着同样的问题。我只是在search_index.py

的solr字段中添加null = True

phone = CharField(model_attr="phone", null=True)