kopia lustrzana https://github.com/wagtail/wagtail
Ensure that models can still be registered with ReferenceIndex.register_model after the initial set of signals has been connected
rodzic
072c8f21e1
commit
85c9b6689f
|
@ -17,8 +17,6 @@ By default, the index will store references between objects managed within the W
|
|||
When introduced in Wagtail 4.1, the Reference Index recorded references in all application models by default. Wagtail 5.0 reduced the scope of the default models to those specifically linked with Wagtail.
|
||||
```
|
||||
|
||||
Apps with models that are indexed need to listed in `INSTALLED_APPS` before the `wagtail` app.
|
||||
|
||||
The reference index does not require any further configuration. However there are circumstances where it may be necessary to add or remove models from the index.
|
||||
|
||||
(registering_a_model_for_indexing)=
|
||||
|
|
|
@ -250,6 +250,9 @@ class ReferenceIndex(models.Model):
|
|||
"""
|
||||
Registers the model for indexing.
|
||||
"""
|
||||
if model in cls.indexed_models:
|
||||
return
|
||||
|
||||
if cls.model_is_indexable(model):
|
||||
cls.indexed_models.add(model)
|
||||
cls._register_as_tracked_model(model)
|
||||
|
@ -260,7 +263,16 @@ class ReferenceIndex(models.Model):
|
|||
Add the model and all of its ParentalKey-linked children to the set of
|
||||
models to be tracked by signal handlers.
|
||||
"""
|
||||
if model in cls.tracked_models:
|
||||
return
|
||||
|
||||
from wagtail.signal_handlers import (
|
||||
connect_reference_index_signal_handlers_for_model,
|
||||
)
|
||||
|
||||
cls.tracked_models.add(model)
|
||||
connect_reference_index_signal_handlers_for_model(model)
|
||||
|
||||
for child_relation in get_all_child_relations(model):
|
||||
if cls.model_is_indexable(
|
||||
child_relation.related_model,
|
||||
|
|
|
@ -99,16 +99,24 @@ def remove_reference_index_on_delete(instance, **kwargs):
|
|||
ReferenceIndex.remove_for_object(instance)
|
||||
|
||||
|
||||
def connect_reference_index_signal_handlers_for_model(model):
|
||||
post_save.connect(update_reference_index_on_save, sender=model)
|
||||
post_delete.connect(remove_reference_index_on_delete, sender=model)
|
||||
|
||||
|
||||
def connect_reference_index_signal_handlers(**kwargs):
|
||||
for model in ReferenceIndex.tracked_models:
|
||||
post_save.connect(update_reference_index_on_save, sender=model)
|
||||
post_delete.connect(remove_reference_index_on_delete, sender=model)
|
||||
connect_reference_index_signal_handlers_for_model(model)
|
||||
|
||||
|
||||
def disconnect_reference_index_signal_handlers_for_model(model):
|
||||
post_save.disconnect(update_reference_index_on_save, sender=model)
|
||||
post_delete.disconnect(remove_reference_index_on_delete, sender=model)
|
||||
|
||||
|
||||
def disconnect_reference_index_signal_handlers(**kwargs):
|
||||
for model in ReferenceIndex.tracked_models:
|
||||
post_save.disconnect(update_reference_index_on_save, sender=model)
|
||||
post_delete.disconnect(remove_reference_index_on_delete, sender=model)
|
||||
disconnect_reference_index_signal_handlers_for_model(model)
|
||||
|
||||
|
||||
def register_signal_handlers():
|
||||
|
@ -121,9 +129,6 @@ def register_signal_handlers():
|
|||
post_save.connect(reset_locales_display_names_cache, sender=Locale)
|
||||
post_delete.connect(reset_locales_display_names_cache, sender=Locale)
|
||||
|
||||
# Reference index signal handlers
|
||||
connect_reference_index_signal_handlers()
|
||||
|
||||
# Disconnect reference index signals while migrations are running
|
||||
# (we don't want to log references in migrations as the ReferenceIndex model might not exist)
|
||||
pre_migrate.connect(disconnect_reference_index_signal_handlers)
|
||||
|
|
Ładowanie…
Reference in New Issue