2012-04-14 14 views
6

He estado escribiendo mis primeros modelos de Django y quería echar un vistazo a la clase base que se extienden todos los modelos (ejemplo: "class Poll (models.Model") pero no pude encontrar la clase base Model. Comprobé source on github y cuando busqué en el directorio django.db.models, me sorprendí al no encontrar un archivo "Model.py" que pudiera ver. ¿Se genera este archivo? ¿O la clase Model vive en otro lado? ¿O hay algún paquete de Python pasando magia? que no estoy familiarizado con?¿Dónde está Model.py en el código fuente de Django?

Respuesta

5

Como se ha comentado anteriormente, Python no es Java. En particular, no hay nada en Python que diga que una clase tiene que vivir en un archivo con el mismo nombre que la clase.

Como San4ez señala, las vidas de clase Model en django.db.models.base, y se importa en el archivo __init__.py en ese directorio para que se pueda hacer referencia directamente como models.Model. Esto no es ningún tipo de magia, solo Python idiomático normal.

Sin embargo, una vez que observe el código de la clase en sí, encontrará que realmente contiene bastante magia de Python, específicamente en torno a las metaclases. Pero esa es una pregunta diferente.

+0

Lo encontré con su ayuda (no gracias a la búsqueda de github). Esto me lleva a algunas preguntas bastante filosóficas sobre las convenciones/estilo/reglas de Python, sin embargo, esa es una pregunta para otra publicación (y después de un poco de investigación de fondo también se ha hecho). ¡Gracias! –

2

En https://github.com/django/django/blob/master/django/db/models/__init__.py

mirada

from django.db.models.base import Model 

Así Model clase está descrito allí https://github.com/django/django/blob/master/django/db/models/base.py

Literalmente puede importar modelo de esta manera from django.db.models.base import Model a su proyecto. Pero los desarrolladores de django core decidieron ocultar algunas clases de servicio, importar algunas al paquete django.db.models y ofrecerle una importación más corta.

Cuestiones relacionadas