2010-04-09 16 views
11

Estoy aprendiendo Django y estoy tratando de entender el uso de models.py en el proyecto versus la aplicación. Parece de los ejemplos del tutorial que incluyo una definición de modelo en la aplicación, pero cuando fui a aplicar ese conocimiento a mi propia base de datos existente, me quedé atascado.Django project models.py versus app models.py

Tomé una base de datos que utilizo (una copia por supuesto) y generé el esquema conceptual como un modelo django usando inspectdb. Hice esto a nivel de proyecto, y supuse que entonces podría escribir aplicaciones utilizando subesquemas en las aplicaciones para ese proyecto.

Pero al generalizar el tutorial, definen el modelo en el modelo de la aplicación. Si lo hiciera, estaría repitiendo el modelo (o parte de él) que ya está en el nivel del proyecto, lo que parece un error y un problema de mantenimiento.

Entonces, ¿cómo, en el estilo Django, uso el esquema del proyecto (o partes del mismo) sin redefinirlo en los modelos de la aplicación.py?

Gracias de antemano.

Respuesta

22

No debería haber ningún motivo para tener "modelos a nivel de proyecto" (o "vistas a nivel de proyecto" para el caso). Solo necesita dividir la funcionalidad en aplicaciones separadas.

Digamos que está diseñando un sitio web de Intranet para una escuela. Tendría una aplicación que trata con las cuentas de los estudiantes y otra que genera horarios, y otra más para un tablero de mensajes interno, etc. Cada aplicación define sus propios modelos (no hay "modelos a nivel de proyecto"), pero las aplicaciones puede importar los modelos de los demás (de modo que las publicaciones de la pizarra de mensajes pueden tener un campo ForeignKey señalando al alumno desde la aplicación "estudiantes").

Ver también James Bennett's "writing reusable Django applications" presentation de DjangoCon 2008.

+0

¡Charla muy interesante y educativa! James también mencionó que los sitios worldonline solo tienen 'settings.py' y' urls.py'. El resto son aplicaciones reutilizables en el camino de python de apache. – vdboor

3

Los modelos Django solo pueden residir en aplicaciones, no en el proyecto en sí. De forma predeterminada, manage.py inspectdb muestra el contenido del archivo models.py y le toca a usted colocarlo en el lugar correcto.

En su caso, sería más fácil poner todo en una aplicación y luego dividirlo en los lugares en los que tendría sentido.

No estoy seguro de cuál es el estado con la versión actual, pero antes de la presencia del módulo models en el paquete era indicación de que esta es la aplicación django y se puede poner en la lista INSTALLED_APPS.

5
  • Un modelo sólo debe definirse una vez en un proyecto Django

  • El modelo tiene que existir en una aplicación en el marco del proyecto

  • Puede acceder a los modelos de otras aplicaciones importándolos

  • Si necesita "agregar" a un modelo existente se puede heredar de (ver: multi table inheritance). Esto es bastante simple, pero si recién está empezando, puede dejarlo para más adelante.

Cuestiones relacionadas