Saltar al contenido

¿Cómo cambiar el nombre de una aplicación Django?

Solución:

Siga estos pasos para cambiar el nombre de una aplicación en Django:

  1. Cambie el nombre de la carpeta que está en la raíz de su proyecto
  2. Cambie cualquier referencia a su aplicación en sus dependencias, es decir, la aplicación views.py, urls.py , ‘manage.py’ y settings.py archivos.
  3. Editar la tabla de la base de datos django_content_type con el siguiente comando: UPDATE django_content_type SET app_label="<NewAppName>" WHERE app_label="<OldAppName>"
  4. Además, si tiene modelos, tendrá que cambiar el nombre de las tablas de modelos. Para uso de postgres ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName. Para mysql también creo que es lo mismo (como lo menciona @null_radix)
  5. (Para Django> = 1.7) Actualice el django_migrations table para evitar que se vuelvan a ejecutar sus migraciones anteriores: UPDATE django_migrations SET app='<NewAppName>' WHERE app='<OldAppName>'. Nota: hay cierto debate (en los comentarios) si este paso es necesario para Django 1.8+; Si alguien lo sabe con seguridad, actualice aquí.
  6. Si tu models.py La Meta Class tiene app_name en la lista, asegúrese de cambiarle el nombre también (mencionado por @will).
  7. Si has espaciado tu nombre static o templates carpetas dentro de su aplicación, también deberá cambiarles el nombre. Por ejemplo, renombrar old_app/static/old_app para new_app/static/new_app.
  8. Para cambiar el nombre de django models, necesitarás cambiar django_content_type.name entrada en DB. Para uso de PostgreSQL UPDATE django_content_type SET name="<newModelName>" where name="<oldModelName>" AND app_label="<OldAppName>"

Meta punto (si usa virtualenv): Vale la pena señalar que si está cambiando el nombre del directorio que contiene su virtualenv, es probable que haya varios archivos en su entorno que contengan una ruta absoluta y también deberán actualizarse. Si recibe errores como ImportError: No module named ... este podría ser el culpable. (gracias a @danyamachine por proporcionar esto).

Otras referencias: es posible que también desee consultar los enlaces a continuación para obtener una imagen más completa

  1. Cambiar el nombre de una aplicación con Django y South
  2. ¿Cómo migro un modelo de una aplicación django a una nueva?
  3. ¿Cómo cambiar el nombre de una aplicación Django?
  4. Migración hacia atrás con Django South
  5. ¿La forma más fácil de cambiar el nombre de un modelo usando Django / South?
  6. Código Python (gracias a A.Raouf) para automatizar los pasos anteriores (Código no probado. ¡Has sido advertido!)
  7. Código Python (gracias a rafaponieman) para automatizar los pasos anteriores (Código no probado. ¡Has sido advertido!)

Lo nuevo en Django 1.7 es un registro de aplicaciones que almacena la configuración y proporciona introspección. Esta maquinaria le permite cambiar varios atributos de la aplicación.

El punto principal que quiero señalar es que no siempre es necesario cambiar el nombre de una aplicación: con la configuración de la aplicación es posible resolver aplicaciones en conflicto. Pero también el camino a seguir si su aplicación necesita un nombre amigable.

Como ejemplo, quiero nombrar mi aplicación de encuestas ‘Comentarios de los usuarios’. Dice así:

Crear un apps.py archivo en el polls directorio:

from django.apps import AppConfig

class PollsConfig(AppConfig):
    name="polls"
    verbose_name = "Feedback from users"

Agregue la configuración de la aplicación predeterminada a su polls/__init__.py:

default_app_config = 'polls.apps.PollsConfig'

Para obtener más configuración de la aplicación: https://docs.djangoproject.com/en/1.7/ref/applications/

¡Problema divertido! Pronto tendré que cambiar el nombre de muchas aplicaciones, así que hice un ensayo.

Este método permite avanzar en pasos atómicos para minimizar las interrupciones para otros desarrolladores que trabajan en la aplicación a la que le estás cambiando el nombre.

Vea el enlace en la parte inferior de esta respuesta para ver el código de ejemplo de trabajo.

  1. Prepare el código existente para la mudanza:

    • Crear una configuración de aplicación (establecer name y label a los valores predeterminados).
    • Agregue la configuración de la aplicación a INSTALLED_APPS.
    • En todos los modelos, establezca explícitamente db_table al valor actual.
    • Doctor migraciones para que db_table fue “siempre” definido explícitamente.
    • Asegúrese de que no se requieran migraciones (verifique el paso anterior).
  2. Cambiar la etiqueta de la aplicación:

    • Colocar label en la configuración de la aplicación al nuevo nombre de la aplicación.
    • Actualice las migraciones y las claves externas para hacer referencia a la nueva etiqueta de la aplicación.
    • Actualizar plantillas para vistas genéricas basadas en clases (la ruta predeterminada es <app_label>/<model_name>_<suffix>.html)
    • Ejecute SQL sin procesar para corregir migraciones y content_types aplicación (desafortunadamente, algo de SQL sin procesar es inevitable). No puede ejecutar esto en una migración.

      UPDATE django_migrations
         SET app = 'catalogue'
       WHERE app = 'shop';
      
      UPDATE django_content_type
         SET app_label="catalogue"
       WHERE app_label="shop";
      
    • Asegúrese de que no se requieran migraciones (verifique el paso anterior).

  3. Cambiar el nombre de las tablas:

    • Eliminar “personalizado” db_table.
    • Correr makemigrations para que django pueda cambiar el nombre de la tabla “a la predeterminada”.
  4. Mover los archivos:

    • Cambiar el nombre del directorio del módulo.
    • Corrija las importaciones.
    • Actualizar la configuración de la aplicación name.
    • Actualizar donde INSTALLED_APPS hace referencia a la configuración de la aplicación.
  5. Organizar:

    • Elimine la configuración de la aplicación personalizada si ya no es necesaria.
    • Si la configuración de la aplicación desapareció, no olvide eliminarla también de INSTALLED_APPS.

Solución de ejemplo: He creado app-rename-example, un proyecto de ejemplo en el que puedes ver cómo cambié el nombre de una aplicación, una confirmación a la vez.

El ejemplo usa Python 2.7 y Django 1.8, pero estoy seguro de que el mismo proceso funcionará en al menos Python 3.6 y Django 2.1.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *