Cómo comente en el post anterior, intentaremos desarrollar una aplicación web algo compleja, por lo tanto, creo que lo mejor es, que desde el principio, definamos claramente lo que queremos. Por lo tanto, detallaremos las especificaciones que necesitamos para desarrollar Classifieds:
- Los usuarios crean los anuncios y estos pueden estar o no registrados (la diferencia estriba, en que los usuarios registrados, dispondran de un panel de administración de sus anuncios).
- Los usuarios podrán publicar anuncios de particulares y de empresas.
- Los anuncios estarán clasificados por subcategorias, categorias y tipos de anuncio (se compra, se vende, se alquila, se traspasa, etc…)
- Los anuncios estarán ubicados por paises, estados/comunidades autónomas y ciudades/provincias.
- Los anuncios son siempre validados por un editor/administrador de la aplicación web.
Estas son a groso modo las principales especificaciones de nuestra aplicación, aunque no descarto que se vayan incrementando a medida que vayamos avanzando en su desarrollo (procuraré actualizar esta entrada si esto sucede).
Ahora antes de definir las relaciones existentes entre los distintos tipos de datos y sus modelos, veamos el siguiente diagrama donde se muestra de forma gráfica estas relaciones:

Las relaciones entre los distintos modelos de datos son las siguientes:
- Un usuario solo puede ser un tipo de usuario (particular o empresa) y de un tipo de usuario existen muchos usuarios.
- Un tipo de usuario, puede tener uno o muchos anuncios, pero un anuncio sólo puede pertener a un tipo de usuario.
- Un anuncio pertenece a un tipo de anuncio (Se compra, Se vende, Se alquila, etc…) y un tipo de anuncio puede tener uno o muchos anuncios.
- Un anuncio pertenece a una ciudad o provincia y una ciudad o provincia puede tener muchos anuncios.
- Una ciudad o provincia pertenece a un estado o comunidad autónoma, pero un estado o comunidad autónoma puede tener una o muchas ciudades/provincias.
- Un estado o comunidad autónoma pertenece a un país, y un país puede tener una o muchos estados/ccaa.
- Un anuncio pertenece a una subcategoría y una subcategoría puede tener muchos anuncios.
- Una subcategoria pertenece a una categoría y una categoría puede tener muchas subcategorías.
ACTUALIZACIÓN: 05/08/2009
Añadimos un modelo más que recogerá la información adicional de los anuncios, como imagenes, videos y/o mapas. La relación con anuncio es también de 1:n. Es decir, un anuncio puede tener mucha información adicional y mucha información adicional pertenece a un solo anuncio.
Como vemos todas las relaciones son uno a muchos (1:n).
Ahora estamos en condiciones de crear nuestra aplicación en el proyecto Classifieds.
Para crear una aplicación nueva dentro del proyecto ejecutamos
python manage.py startapp advertisements
Este comando crea el directorio advertisements y los ficheros:

- __init__.py: Define nuestro directorio como un módulo Python válido.
- models.py: Aquí se definen los modelos u objetos que serán mapeados a una base de datos relacional (en nuestro caso PostgreSQL).
- views.py: Define las funciones que van a responder a las urls entrantes.
Creo que en este momento es interesante, saber distinguir proyecto de aplicación, porque cómo bien se indica en el Libro de Django es algo que hace confundir a los principiantes como yo. Copio literalmente:
- Un proyecto es una instancia de un cierto conjunto de aplicaciones de Django, más las configuraciones de esas aplicaciones. Técnicamente, el único requerimiento de un proyecto es que este suministre un archivo de configuración, el cual define la información hacia la conexión a la base de datos, la lista de las aplicaciones instaladas, la variable TEMPLATE_DIRS, y así sucesivamente.
- Una aplicación es un conjunto portable de una funcionalidad de Django, típicamente incluye modelos y vistas, que conviven en un solo paquete de Python. Por ejemplo, Django incluye un número de aplicaciones, tales como un sistema de comentarios y una interfaz de administración automática. Una cosa clave para notar sobre estas aplicaciones es que son portables y reusables en múltiples proyectos.
En la siguiente entrada, ya comenzaremos a escribir algo de código para dar forma a nuestros modelos de datos (models.py) en Python.



