¿Cómo hacer migraciones para una aplicación reutilizable de Django?

Estoy haciendo una aplicación Django reutilizable sin un proyecto. Esta es la estructura del directorio:

/ /myapp/ /myapp/models.py /myapp/migrations/ /myapp/migrations/__init__.py 

Cuando ejecuto django-admin makemigrations el siguiente error:

 django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

Obviamente, esto se debe a que no tengo un módulo de configuración configurado, porque esta es una aplicación reutilizable. Sin embargo, todavía me gustaría enviar migraciones con mi aplicación. ¿Cómo puedo hacerlas?

Necesita un proyecto funcional de Django (con su aplicación instalada en él) para realizar migraciones.

Una forma común de hacer esto es tener un proyecto de “prueba” que contenga las necesidades básicas de un proyecto de Django, que pueda ejecutar para realizar migraciones, etc. Las migraciones se crearán en el lugar correcto dentro del directorio de la aplicación para que aún pueda tenga el control de versión adecuado, etc. dentro de su propia aplicación reutilizable.

Las migraciones creadas de esta manera serán autocontenidas (suponiendo que sus modelos no dependen de modelos de otras aplicaciones) y se pueden enviar como parte de su aplicación empaquetada y reutilizable.

Muchos de los proyectos más grandes basados ​​en Django realmente envían un proyecto de prueba como parte de su código, de modo que los desarrolladores pueden ponerlo en funcionamiento rápidamente para probar aplicaciones y realizar migraciones, etc.

En realidad, no necesita tener un proyecto, todo lo que necesita es un archivo de configuración y un script, que ejecuta la creación de migraciones. Los ajustes deben contener lo siguiente (mínimo):

 # test_settings.py DEBUG = True SECRET_KEY = 'fake-key' INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'your_app' ] 

Y el script, que hace que las migraciones se vean así:

 # make_migrations.py import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_settings") from django.core.management import execute_from_command_line args = sys.argv + ["makemigrations", "your_app"] execute_from_command_line(args) 

y deberías ejecutarlo en python make_migrations.py . Espero que ayude a alguien!