Hi Rob,

That doesn't include the code I mentioned in my previous e-mail. Note the
standalone 'hasattr' call on the line preceding the if statement. The
workaround is to call that in a standalone way to prime a cache and avoid
the error.

Christian

On Tue, Oct 17, 2017 at 1:17 AM, 'Rob Backhurst' via reviewboard <
[email protected]> wrote:

>      77         # Give priority to a template.
>      78         if self.use_template:
>      79             return self.prepare_template(obj)
>      80         elif self.model_attr is not None:
>      81             # Check for `__` in the field for looking through the
> relation.
>      82             attrs = self.model_attr.split('__')
>      83             current_object = obj
>      84
>      85             for attr in attrs:
>      86                 if hasattr(current_object, attr):
>      87                         raise SearchFieldError("The model '%s'
> does not have a model_attr '%s'." % (repr(current_object), attr))
>      88
>      89                 current_object = getattr(current_object, attr,
> None)
>      90
>      91                 if current_object is None:
>      92                     if self.has_default():
>      93                         current_object = self._default
>      94                         # Fall out of the loop, given any further
> attempts at
>      95                         # accesses will fail misreably.
>
>
> Thanks
> Rob
>
> On Tuesday, 17 October 2017 06:28:49 UTC+1, Christian Hammond wrote:
>>
>> Can you show me all the code within about 5 lines of your modification?
>>
>> Christian
>>
>>
>> On Mon, Oct 16, 2017 at 18:01 'Rob Backhurst' via reviewboard <
>> [email protected]> wrote:
>>
>>> Hi Christian,
>>>
>>> It crashes straight away with this error...
>>>
>>> Removing all documents from your index because you said so.
>>> All documents removed.
>>> Indexing 558 users
>>> ERROR:root:Error updating auth using default
>>> Traceback (most recent call last):
>>>   File 
>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>> line 188, in handle_label
>>>     self.update_backend(label, using)
>>>   File 
>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>> line 233, in update_backend
>>>     do_update(backend, index, qs, start, end, total,
>>> verbosity=self.verbosity, commit=self.commit)
>>>   File 
>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>> line 96, in do_update
>>>     backend.update(index, current_qs, commit=commit)
>>>   File 
>>> "/usr/lib/python2.7/site-packages/haystack/backends/whoosh_backend.py",
>>> line 196, in update
>>>     doc = index.full_prepare(obj)
>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py", line
>>> 212, in full_prepare
>>>     self.prepared_data = self.prepare(obj)
>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py", line
>>> 203, in prepare
>>>     self.prepared_data[field.index_fieldname] = field.prepare(obj)
>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line 159,
>>> in prepare
>>>     return self.convert(super(CharField, self).prepare(obj))
>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line 87,
>>> in prepare
>>>     raise SearchFieldError("The model '%s' does not have a model_attr
>>> '%s'." % (repr(current_object), attr))
>>> SearchFieldError: The model '<User: admin>' does not have a model_attr
>>> 'username'.
>>> - show quoted text -
>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line 159,
>>> in prepare
>>>     return self.convert(super(CharField, self).prepare(obj))
>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line 87,
>>> in prepare
>>>     raise SearchFieldError("The model '%s' does not have a model_attr
>>> '%s'." % (repr(current_object), attr))
>>> haystack.exceptions.SearchFieldError: The model '<User: admin>' does
>>> not have a model_attr 'username'.
>>>
>>> Thanks
>>> Rob
>>>
>>> On Monday, 16 October 2017 22:46:09 UTC+1, Christian Hammond wrote:
>>>
>>>> Hi Rob,
>>>>
>>>> Actually, this should function as a workaround for now. You can do this
>>>> in that same Haystack file. Change the entirety of that previous code to:
>>>>
>>>>     hasattr(current_object, attr)
>>>>
>>>>     if hasattr(current_object, attr):
>>>>         raise SearchFieldError("The model '%s' does not have a
>>>> model_attr '%s'." % (repr(current_object), attr))
>>>>
>>>> What will happen is the initial hasattr will trigger the crash that's
>>>> resulting in the failure, but we're discarding the result of the initial
>>>> one. A lucky (in this case) side-effect is that only the first call on a
>>>> given review request will fail, and the second will succeed (internal state
>>>> caching stuff). This should allow a full index to proceed.
>>>>
>>>> It's a temporary fix until we get the next release out.
>>>>
>>>> Christian
>>>>
>>> On Mon, Oct 16, 2017 at 11:48 AM, 'Rob Backhurst' via reviewboard <
>>>> [email protected]> wrote:
>>>>
>>> Thanks Christian, is that something we’ll need to do directly to the
>>>>> database? I don’t suppose you have any info on what needs to be done? Our
>>>>> DBA is on leave at the mo.
>>>>>
>>>>> No probs, not always easy to get to the bottom of these things!
>>>>>
>>>>> Thanks
>>>>>
>>>> Rob
>>>>>
>>>>> Sent from my iPhone
>>>>>
>>>>> On 16 Oct 2017, at 19:15, Christian Hammond <[email protected]>
>>>>> wrote:
>>>>>
>>>>> Interesting. Okay, yeah, you'd need to remove the commit ID from one
>>>>> of them for now. I'll put a fix together for the next 2.5.x and schedule a
>>>>> release. Thanks for your patience on this!
>>>>>
>>>>> Christian
>>>>>
>>>>>
>>>>> On Mon, Oct 16, 2017 at 07:46 'Rob Backhurst' via reviewboard <
>>>>> [email protected]> wrote:
>>>>>
>>>>> Hi Christian,
>>>>>>
>>>>>> Here you go...
>>>>>>
>>>>>> ERROR:root:Error updating reviews using default
>>>>>> Traceback (most recent call last):
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>> line 188, in handle_label
>>>>>>     self.update_backend(label, using)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>> line 233, in update_backend
>>>>>>     do_update(backend, index, qs, start, end, total,
>>>>>> verbosity=self.verbosity, commit=self.commit)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>> line 96, in do_update
>>>>>>     backend.update(index, current_qs, commit=commit)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/backends/whoosh_backend.py",
>>>>>> line 196, in update
>>>>>>     doc = index.full_prepare(obj)
>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py", line
>>>>>> 212, in full_prepare
>>>>>>     self.prepared_data = self.prepare(obj)
>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py", line
>>>>>> 203, in prepare
>>>>>>     self.prepared_data[field.index_fieldname] = field.prepare(obj)
>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line
>>>>>> 166, in prepare
>>>>>>     return self.convert(super(CharField, self).prepare(obj))
>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line
>>>>>> 90, in prepare
>>>>>>     getattr(current_object, attr)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/reviewboard/reviews/models/review_request.py",
>>>>>> line 273, in get_commit
>>>>>>     commit_id=six.text_type(self.changenum))
>>>>>>   File "/usr/lib/python2.7/site-packages/django/db/models/query.py",
>>>>>> line 493, in update
>>>>>>     rows = query.get_compiler(self.db).execute_sql(None)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py",
>>>>>> line 980, in execute_sql
>>>>>>     cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py",
>>>>>> line 786, in execute_sql
>>>>>>     cursor.execute(sql, params)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/db/backends/util.py",
>>>>>> line 53, in execute
>>>>>>     return self.cursor.execute(sql, params)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/db/utils.py", line
>>>>>> 99, in __exit__
>>>>>>     six.reraise(dj_exc_type, dj_exc_value, traceback)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/db/backends/util.py",
>>>>>> line 53, in execute
>>>>>>     return self.cursor.execute(sql, params)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/db/backends/mysql/base.py",
>>>>>> line 124, in execute
>>>>>>     return self.cursor.execute(query, args)
>>>>>>   File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line
>>>>>> 205, in execute
>>>>>>     self.errorhandler(self, exc, value)
>>>>>>   File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py",
>>>>>> line 36, in defaulterrorhandler
>>>>>>     raise errorclass, errorvalue
>>>>>> IntegrityError: (1062, "Duplicate entry '1701871-1' for key
>>>>>> 'reviews_reviewrequest_b8c24015'")
>>>>>> Traceback (most recent call last):
>>>>>>   File "/usr/bin/rb-site", line 9, in <module>
>>>>>>     load_entry_point('ReviewBoard==2.5.16', 'console_scripts',
>>>>>> 'rb-site')()
>>>>>>   File "/usr/lib/python2.7/site-packages/reviewboard/cmdline/rbsite.py",
>>>>>> line 1964, in main
>>>>>>     command.run()
>>>>>>   File "/usr/lib/python2.7/site-packages/reviewboard/cmdline/rbsite.py",
>>>>>> line 1884, in run
>>>>>>     site.run_manage_command(args[0], args[1:])
>>>>>>   File "/usr/lib/python2.7/site-packages/reviewboard/cmdline/rbsite.py",
>>>>>> line 712, in run_manage_command
>>>>>>     execute_from_command_line([__file__, cmd] + params)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/__init__.py",
>>>>>> line 399, in execute_from_command_line
>>>>>>     utility.execute()
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/__init__.py",
>>>>>> line 392, in execute
>>>>>>     self.fetch_command(subcommand).run_from_argv(self.argv)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>> line 242, in run_from_argv
>>>>>>     self.execute(*args, **options.__dict__)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>> line 285, in execute
>>>>>>     output = self.handle(*args, **options)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/reviewboard/reviews/management/commands/index.py",
>>>>>> line 19, in handle
>>>>>>     call_command('rebuild_index', interactive=False)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/__init__.py",
>>>>>> line 159, in call_command
>>>>>>     return klass.execute(*args, **defaults)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>> line 285, in execute
>>>>>>     output = self.handle(*args, **options)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/rebuild_index.py",
>>>>>> line 26, in handle
>>>>>>     call_command('update_index', **options)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/__init__.py",
>>>>>> line 159, in call_command
>>>>>>     return klass.execute(*args, **defaults)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>> line 285, in execute
>>>>>>     output = self.handle(*args, **options)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>> line 183, in handle
>>>>>>     return super(Command, self).handle(*items, **options)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>> line 385, in handle
>>>>>>     label_output = self.handle_label(label, **options)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>> line 188, in handle_label
>>>>>>     self.update_backend(label, using)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>> line 233, in update_backend
>>>>>>     do_update(backend, index, qs, start, end, total,
>>>>>> verbosity=self.verbosity, commit=self.commit)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>> line 96, in do_update
>>>>>>     backend.update(index, current_qs, commit=commit)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/haystack/backends/whoosh_backend.py",
>>>>>> line 196, in update
>>>>>>     doc = index.full_prepare(obj)
>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py", line
>>>>>> 212, in full_prepare
>>>>>>     self.prepared_data = self.prepare(obj)
>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py", line
>>>>>> 203, in prepare
>>>>>>     self.prepared_data[field.index_fieldname] = field.prepare(obj)
>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line
>>>>>> 166, in prepare
>>>>>>     return self.convert(super(CharField, self).prepare(obj))
>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line
>>>>>> 90, in prepare
>>>>>>     getattr(current_object, attr)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/reviewboard/reviews/models/review_request.py",
>>>>>> line 273, in get_commit
>>>>>>     commit_id=six.text_type(self.changenum))
>>>>>>   File "/usr/lib/python2.7/site-packages/django/db/models/query.py",
>>>>>> line 493, in update
>>>>>>     rows = query.get_compiler(self.db).execute_sql(None)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py",
>>>>>> line 980, in execute_sql
>>>>>>     cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py",
>>>>>> line 786, in execute_sql
>>>>>>     cursor.execute(sql, params)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/db/backends/util.py",
>>>>>> line 53, in execute
>>>>>>     return self.cursor.execute(sql, params)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/db/utils.py", line
>>>>>> 99, in __exit__
>>>>>>     six.reraise(dj_exc_type, dj_exc_value, traceback)
>>>>>>   File "/usr/lib/python2.7/site-packages/django/db/backends/util.py",
>>>>>> line 53, in execute
>>>>>>     return self.cursor.execute(sql, params)
>>>>>>   File 
>>>>>> "/usr/lib/python2.7/site-packages/django/db/backends/mysql/base.py",
>>>>>> line 124, in execute
>>>>>>     return self.cursor.execute(query, args)
>>>>>>   File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line
>>>>>> 205, in execute
>>>>>>     self.errorhandler(self, exc, value)
>>>>>>   File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py",
>>>>>> line 36, in defaulterrorhandler
>>>>>>     raise errorclass, errorvalue
>>>>>> django.db.utils.IntegrityError: (1062, "Duplicate entry '1701871-1'
>>>>>> for key 'reviews_reviewrequest_b8c24015'")
>>>>>>
>>>>>>
>>>>>> The error looks familiar - we had some issue sin the past with
>>>>>> duplicate entries.
>>>>>> The index never used to fail for them though...
>>>>>>
>>>>>> Thanks
>>>>>> Rob
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Monday, 16 October 2017 10:38:52 UTC+1, Christian Hammond wrote:
>>>>>>
>>>>>>> Hi Rob,
>>>>>>>
>>>>>>> I think what's happening is that there's an exception being raised
>>>>>>> the first time this is accessed that is resulting in hasattr failing. 
>>>>>>> One
>>>>>>> more check (I'm about to go to bed so I'll have to follow up in the
>>>>>>> morning).
>>>>>>>
>>>>>>> Before the "has_attr = ..." line, add:
>>>>>>>
>>>>>>>     if attr == 'commit':
>>>>>>>         getattr(current_object, attr)
>>>>>>>
>>>>>>> I imagine that's going to result in a new crash, which is good. Show
>>>>>>> me what that says.
>>>>>>>
>>>>>>> Christian
>>>>>>>
>>>>>> On Mon, Oct 16, 2017 at 2:09 AM, 'Rob Backhurst' via reviewboard <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>> Hi Chris,
>>>>>>>>
>>>>>>>> Certainly seems a bit weird - I appreciate all your efforts so far!.
>>>>>>>> See the out put from the latest index below. If this doesn't tell
>>>>>>>> you anything useful, perhaps we can try (on our test system) removing 
>>>>>>>> the
>>>>>>>> review/record that seems to be causing this and re-run the index?
>>>>>>>>
>>>>>>>>
>>>>>>>> ERROR:root:Error updating reviews using default
>>>>>>>> Traceback (most recent call last):
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>>>> line 188, in handle_label
>>>>>>>>     self.update_backend(label, using)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>>>> line 233, in update_backend
>>>>>>>>     do_update(backend, index, qs, start, end, total,
>>>>>>>> verbosity=self.verbosity, commit=self.commit)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>>>> line 96, in do_update
>>>>>>>>     backend.update(index, current_qs, commit=commit)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/backends/whoosh_backend.py",
>>>>>>>> line 196, in update
>>>>>>>>     doc = index.full_prepare(obj)
>>>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py",
>>>>>>>> line 212, in full_prepare
>>>>>>>>     self.prepared_data = self.prepare(obj)
>>>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py",
>>>>>>>> line 203, in prepare
>>>>>>>>     self.prepared_data[field.index_fieldname] = field.prepare(obj)
>>>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line
>>>>>>>> 164, in prepare
>>>>>>>>     return self.convert(super(CharField, self).prepare(obj))
>>>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line
>>>>>>>> 92, in prepare
>>>>>>>>     raise SearchFieldError("The model '%s' ('%s' -- %s.%s at %s --
>>>>>>>> %s:%s) does not have a model_attr '%s' (%s -- %s)." %
>>>>>>>> (obj.__class__.__name__, current_object.pk,
>>>>>>>> current_object.__class__.__module__, current_object.__class__.__name__,
>>>>>>>> inspect.getfile(obj.__class__), id(obj), id(current_object), attr,
>>>>>>>> hasattr(current_object, attr), has_attr))
>>>>>>>> SearchFieldError: The model 'ReviewRequest' ('27393' --
>>>>>>>> reviewboard.reviews.models.review_request.ReviewRequest at
>>>>>>>> /usr/lib/python2.7/site-packages/reviewboard/reviews/models/review_request.pyc
>>>>>>>> -- 231638480:231638480) does not have a model_attr 'commit' (True -- 
>>>>>>>> False).
>>>>>>>> Traceback (most recent call last):
>>>>>>>>   File "/usr/bin/rb-site", line 9, in <module>
>>>>>>>>     load_entry_point('ReviewBoard==2.5.16', 'console_scripts',
>>>>>>>> 'rb-site')()
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/reviewboard/cmdline/rbsite.py",
>>>>>>>> line 1964, in main
>>>>>>>>     command.run()
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/reviewboard/cmdline/rbsite.py",
>>>>>>>> line 1884, in run
>>>>>>>>     site.run_manage_command(args[0], args[1:])
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/reviewboard/cmdline/rbsite.py",
>>>>>>>> line 712, in run_manage_command
>>>>>>>>     execute_from_command_line([__file__, cmd] + params)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/__init__.py",
>>>>>>>> line 399, in execute_from_command_line
>>>>>>>>     utility.execute()
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/__init__.py",
>>>>>>>> line 392, in execute
>>>>>>>>     self.fetch_command(subcommand).run_from_argv(self.argv)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>>>> line 242, in run_from_argv
>>>>>>>>     self.execute(*args, **options.__dict__)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>>>> line 285, in execute
>>>>>>>>     output = self.handle(*args, **options)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/reviewboard/reviews/management/commands/index.py",
>>>>>>>> line 19, in handle
>>>>>>>>     call_command('rebuild_index', interactive=False)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/__init__.py",
>>>>>>>> line 159, in call_command
>>>>>>>>     return klass.execute(*args, **defaults)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>>>> line 285, in execute
>>>>>>>>     output = self.handle(*args, **options)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/rebuild_index.py",
>>>>>>>> line 26, in handle
>>>>>>>>     call_command('update_index', **options)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/__init__.py",
>>>>>>>> line 159, in call_command
>>>>>>>>     return klass.execute(*args, **defaults)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>>>> line 285, in execute
>>>>>>>>     output = self.handle(*args, **options)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>>>> line 183, in handle
>>>>>>>>     return super(Command, self).handle(*items, **options)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/django/core/management/base.py",
>>>>>>>> line 385, in handle
>>>>>>>>     label_output = self.handle_label(label, **options)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>>>> line 188, in handle_label
>>>>>>>>     self.update_backend(label, using)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>>>> line 233, in update_backend
>>>>>>>>     do_update(backend, index, qs, start, end, total,
>>>>>>>> verbosity=self.verbosity, commit=self.commit)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/management/commands/update_index.py",
>>>>>>>> line 96, in do_update
>>>>>>>>     backend.update(index, current_qs, commit=commit)
>>>>>>>>   File 
>>>>>>>> "/usr/lib/python2.7/site-packages/haystack/backends/whoosh_backend.py",
>>>>>>>> line 196, in update
>>>>>>>>     doc = index.full_prepare(obj)
>>>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py",
>>>>>>>> line 212, in full_prepare
>>>>>>>>     self.prepared_data = self.prepare(obj)
>>>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/indexes.py",
>>>>>>>> line 203, in prepare
>>>>>>>>     self.prepared_data[field.index_fieldname] = field.prepare(obj)
>>>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line
>>>>>>>> 164, in prepare
>>>>>>>>     return self.convert(super(CharField, self).prepare(obj))
>>>>>>>>   File "/usr/lib/python2.7/site-packages/haystack/fields.py", line
>>>>>>>> 92, in prepare
>>>>>>>>     raise SearchFieldError("The model '%s' ('%s' -- %s.%s at %s --
>>>>>>>> %s:%s) does not have a model_attr '%s' (%s -- %s)." %
>>>>>>>> (obj.__class__.__name__, current_object.pk,
>>>>>>>> current_object.__class__.__module__, current_object.__class__.__name__,
>>>>>>>> inspect.getfile(obj.__class__), id(obj), id(current_object), attr,
>>>>>>>> hasattr(current_object, attr), has_attr))
>>>>>>>> haystack.exceptions.SearchFieldError: The model 'ReviewRequest'
>>>>>>>> ('27393' -- reviewboard.reviews.models.review_request.ReviewRequest
>>>>>>>> at 
>>>>>>>> /usr/lib/python2.7/site-packages/reviewboard/reviews/models/review_request.pyc
>>>>>>>> -- 231638480:231638480) does not have a model_attr 'commit' (True -- 
>>>>>>>> False).
>>>>>>>>
>>>>>>>>
>>>>>>>> Thaks
>>>>>>>> Rob
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Monday, 16 October 2017 06:31:25 UTC+1, Christian Hammond wrote:
>>>>>>>>>
>>>>>>>>> Hi Rob,
>>>>>>>>>
>>>>>>>>> At this point, "Gremlins" appear to be the best answer from what
>>>>>>>>> I'm able to see right now. The output in that error is directly
>>>>>>>>> contradicting the conditional that allows the error to be shown, so
>>>>>>>>> something really bizarre is happening that absolutely should not be 
>>>>>>>>> able to
>>>>>>>>> happen. It's not normal.
>>>>>>>>>
>>>>>>>>> There's one last thing I want to see... I don't think it's going
>>>>>>>>> to give me any answers directly, but let's see where this goes.
>>>>>>>>>
>>>>>>>>> Change the code to:
>>>>>>>>>
>>>>>>>>>     import inspect
>>>>>>>>>     has_attr = hasattr(current_object, attr)
>>>>>>>>>     print '%r (%s): %s' % (current_object.__class__,
>>>>>>>>> id(current_object), has_attr)
>>>>>>>>>     if not has_attr:
>>>>>>>>>         raise SearchFieldError("The model '%s' ('%s' -- %s.%s at
>>>>>>>>> %s -- %s:%s) does not have a model_attr '%s' (%s -- %s)." %
>>>>>>>>> (obj.__class__.__name__, current_object.pk,
>>>>>>>>> current_object.__class__.__module__, current_object.__class
>>>>>>>>>
>>>>>>>> --
> Supercharge your Review Board with Power Pack:
> https://www.reviewboard.org/powerpack/
> Want us to host Review Board for you? Check out RBCommons:
> https://rbcommons.com/
> Happy user? Let us know! https://www.reviewboard.org/users/
> ---
> You received this message because you are subscribed to the Google Groups
> "reviewboard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Christian Hammond
President/CEO of Beanbag <https://www.beanbaginc.com/>
Makers of Review Board <https://www.reviewboard.org/>

-- 
Supercharge your Review Board with Power Pack: 
https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: 
https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
--- 
You received this message because you are subscribed to the Google Groups 
"reviewboard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to