2012-01-12 14 views
6

Mi proyecto consiste en varias aplicaciones django que deben implementarse de manera diferente, posiblemente en diferentes máquinas. Sin embargo, a menudo estas aplicaciones ocasionalmente necesitan acceder a los modelos de los demás, así que estaba pensando en "externalizar" mis modelos para que se pueda acceder de forma más elegante desde cualquier aplicación. Así que la idea es hacer que la estructura de directorios que se asemeja algo como esto:Es una buena práctica de programación separar modelos del resto de la aplicación

/ 
+ application1 
+ application2 
+ models 

¿Hay un punto funcional para hacer eso (que no sean de mantenimiento de código), ya que las aplicaciones pueden hacer una referencia cruzada entre sí?

+1

difíciles de decir. ¿Puedes pensar en un inconveniente? ¿Sería confuso con todos los modelos entremezclados en una sola carpeta? – dqhendricks

+1

@dqhendricks: No, en realidad no. De hecho, probablemente sería más fácil de administrar ya que tendríamos un único punto de enfoque para la interfaz de la base de datos ... – Goro

+1

Los modelos ** dentro de las aplicaciones ** pueden depender mutuamente. ¿Por qué intentar extraer los modelos? ¿Qué es "más elegantemente"? 'from app.models import This, That' parece bastante elegante. ¿Cómo podrías mejorar esto? –

Respuesta

4

El siguiente párrafo a la django book me hace pensar que eso no es probablemente una buena idea (que añade el formato de negrita):

Sin embargo, hay un requisito relativo a la convención de aplicación: si está usando Django capa de base de datos (modelos), debe crear una aplicación Django. Los modelos deben vivir dentro de las aplicaciones. Por lo tanto, para comenzar a escribir nuestros modelos, necesitaremos crear una nueva aplicación.

+1

¿Cómo se puede inferir de la cita que los modelos necesitan vivir en _la misma_ aplicación en la que se usan? ¿No podría haber una aplicación de modelos? – aaronasterling

+0

La letra de la ley a veces es diferente del espíritu detrás de ella. Podría haber una aplicación de modelos con un modelo de modelos que tuviera todos los modelos. El objetivo es evitar la aplicación monolítica de monstruos que tiene todo en ella. Pero. Podría, sin duda, tener una aplicación con todos los modelos y todas las otras aplicaciones son solo colecciones de funciones de visualización. Pero ese no es el * espíritu * de Django. –

2

No creo que esta sea una idea particularmente buena, aunque puedo ver el atractivo. Incluirá una gran cantidad de modelos que no está usando si solo quiere instalar una de sus aplicaciones. Creo que es mejor mantener los modelos dentro de la aplicación con la que más se relacionan.

Esto también puede hacer que el uso de la interfaz de administrador sea más confuso. ¿Dónde registras los modelos con el administrador? ¿Dónde haces la personalización del administrador para un modelo?

+0

Buen punto, pero creo que si se hace correctamente, las cosas estarán más ordenadas: si trasladamos todos los modelos a su propia aplicación, podemos simplemente tener el administrador en esa aplicación, que abarca todos los modelos. – Goro

3

El siguiente no encaja bien en los comentarios a la respuesta de @ jcollado así que voy a poner aquí:

https://docs.djangoproject.com/en/dev/topics/db/models/#models-across-files

Modelos través de archivos

Es perfectamente bien para relacionar una modelo a uno desde otra aplicación. Para ello, importe el modelo relacionado en la parte superior del modelo que contiene su modelo. Luego, solo refiérase a la otra clase de modelo donde sea necesario. Por ejemplo:

from geography.models import ZipCode 

class Restaurant(models.Model): 
    # ... 
    zip_code = models.ForeignKey(ZipCode) 
Cuestiones relacionadas