django-haystack - обновление индекса после добавления нового поля в индекс вызывает ошибку - PullRequest
5 голосов
/ 13 декабря 2011

У меня есть сайт 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 ]

11 голосов
/ 13 декабря 2011

Я нашел ответ. Подсказка была в сообщении об ошибке (которое, как мы все знаем, не всегда происходит!):

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

Мое поле модели было создано с blank=True, null=True. Это вызвало ошибку, поэтому я удалил их и добавил default='', и это позволило мне обновить индекс без ошибок. Надеюсь, это когда-нибудь кому-нибудь поможет!

0 голосов
/ 02 июля 2019

Я столкнулся с той же проблемой при индексации поля телефона в моем модале. Я просто добавляю null = True в поле solr в search_index.py

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

...