diff --git a/djangoldp/apps.py b/djangoldp/apps.py index 8811cf84d104b281ac712b9734084d654fc50e1e..8d6e45690a2d9987676729e2b5ad143bfb374732 100644 --- a/djangoldp/apps.py +++ b/djangoldp/apps.py @@ -1,6 +1,5 @@ from django.apps import AppConfig -from django.db import OperationalError - +from django.db import OperationalError, connection class DjangoldpConfig(AppConfig): name = 'djangoldp' @@ -11,7 +10,17 @@ class DjangoldpConfig(AppConfig): def create_local_source(self): from djangoldp.models import LDPSource, Model - model_classes = {cls.__name__: cls for cls in Model.__subclasses__()} + model_classes = {} + db_tables = [] + + for cls in Model.__subclasses__(): + model_classes[cls.__name__] = cls + db_tables.append(LDPSource.get_meta(cls, "db_table")) + + # Check that all model's table already exists + existing_tables = connection.introspection.table_names() + if not all(db_table in existing_tables for db_table in db_tables): + return for class_name in model_classes: model_class = model_classes[class_name] @@ -19,7 +28,7 @@ class DjangoldpConfig(AppConfig): continue path = model_class.get_container_path().strip("/") try: - existing_source = LDPSource.objects.get(federation=path) + LDPSource.objects.get(federation=path) except LDPSource.DoesNotExist: LDPSource.objects.create(federation=path, urlid=Model.absolute_url(model_class)) except OperationalError: