2010-11-09 22 views
24

Seré breve: para trabajar en el espíritu y la idea de una aplicación Django, ¿está bien que una aplicación importe modelos desde otra aplicación? Por ejemplo, una aplicación de estadísticas de usuario importará modelos desde una aplicación de usuario, como: desde users.models import usersCompartir modelos entre las aplicaciones de Django

+2

tenga en cuenta que en django el nombre del modelo debe ser singular. – Ski

Respuesta

15

Si está creando una aplicación interna que no tiene posibilidades de ser lanzada al público, asegúrese de hacer lo que quiera.

Si está compilando una aplicación interna que tiene pocas posibilidades de ser lanzada al público, pero posiblemente será utilizada por futuros/actuales desarrolladores, claro, pero asegúrese de documentar lo que la aplicación necesita para funcionar correctamente.

Si está creando una aplicación para su publicación, intente mantenerla independiente (y dependiente de django-internal, es decir, usar lo que django proporciona, cuando sea posible). Si realmente necesita una aplicación de terceros para funcionar, o si una aplicación de terceros haría su código más manejable, entonces seguro, incluya dependencias, pero esté doblemente seguro de documentar todos los requisitos de y la configuración necesaria.

En la mayoría de los casos, puede hacer casi lo que desee siempre y cuando tenga suficiente documentación.

Sin embargo, tengo que cuestionar la sensatez de hacer su propio modelo User que tiene el mismo nombre que diango auth.User.

+2

No es solo el mismo nombre, es exactamente la misma clase de modelo. –

+0

Las aplicaciones de estadísticas de usuario y usuario solo por el simple hecho de que mi caso no es tan fácil de entender. Esto respondió mi pregunta, ¡gracias! –

-1

No haga esto. Tendrán el mismo nombre de aplicación y el ORM se confundirá. Use un modelo abstracto en su lugar, y ambos se derivan de él.

+2

¿No ha entendido mal lo que el OP está pidiendo? Él no dice nada acerca de la definición de modelos de forma idéntica en diferentes aplicaciones, está hablando de importar la clase de usuario en su aplicación para que pueda obtener datos de ella, ¿no? IOW, la respuesta a esta pregunta es "Sí, por supuesto que puedes". –

+0

@Daniel: Es posible que ese sea el caso. Si el OP aclara lo que está buscando, lo revisaré. –

+1

Deberías considerar revisarlo ya que claramente estabas equivocado acerca de tu interpretación – Sensei

1

Puede tratar mejor extending the Django User model with inheritance. Utilizará el usuario django con un campo personalizado agregado, por lo que tendrá el mismo usuario para todas las aplicaciones.

+2

He visto a varias personas en el IRC (freenode # django) en el pasado que se han encontrado con un problema tras otro al intentar subclase 'auth.User'. En general, es una de esas cosas de las que debe mantenerse alejado a menos que sepa que lo necesita. Como un aparte, [los perfiles de usuario] (http://docs.djangoproject.com/en/1.2/topics/auth/#storing-additional-information-about-users) son el método generalmente preferido para almacenar información adicional sobre Usuarios. – eternicode

25

La respuesta es sí. Está perfectamente bien que una aplicación dentro de su proyecto django pueda importar modelos desde otra aplicación. El poder de un proyecto django radica en las aplicaciones y sus interacciones.

También asegúrese de tener aplicaciones de utilidad importando modelos de aplicaciones más genéricas y no a la inversa. Así que la aplicación "userstatistics" debería importar modelos de la aplicación "users", pero la aplicación "users" no debería depender de las "estadísticas del usuario".

Si su aplicación está importando modelos de una aplicación de terceros (digamos django-piston), asegúrese de especificar eso en un archivo de requisitos.

Cuestiones relacionadas