You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.0 KiB
35 lines
1.0 KiB
from django.apps import apps
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
|
|
__all__ = ["haystack_get_models", "haystack_load_apps"]
|
|
|
|
APP = "app"
|
|
MODEL = "model"
|
|
|
|
|
|
def haystack_get_app_modules():
|
|
"""Return the Python module for each installed app"""
|
|
return [i.module for i in apps.get_app_configs()]
|
|
|
|
|
|
def haystack_load_apps():
|
|
"""Return a list of app labels for all installed applications which have models"""
|
|
return [i.label for i in apps.get_app_configs() if i.models_module is not None]
|
|
|
|
|
|
def haystack_get_models(label):
|
|
try:
|
|
app_mod = apps.get_app_config(label)
|
|
return app_mod.get_models()
|
|
except LookupError:
|
|
if "." not in label:
|
|
raise ImproperlyConfigured("Unknown application label {}".format(label))
|
|
app_label, model_name = label.rsplit(".", 1)
|
|
return [apps.get_model(app_label, model_name)]
|
|
except ImproperlyConfigured:
|
|
pass
|
|
|
|
|
|
def haystack_get_model(app_label, model_name):
|
|
return apps.get_model(app_label, model_name)
|