queryset - models py python
Cerca de 20 modelos en 1 aplicaciĆ³n django (6)
Todos los modelos están relacionados, así que no puedo simplemente convertirlos en aplicaciones separadas, ¿o sí?
Puede separarlos en aplicaciones separadas. Para usar un modelo en una aplicación desde otra aplicación, solo debe importarlo de la misma forma que importaría las aplicaciones django.contrib.
He comenzado a trabajar en una aplicación local para mí que se ejecuta en el navegador. Habiendo pasado recientemente por el tutorial de django, estoy pensando que sería mejor usar django en lugar de simplemente python.
Hay un problema: tengo al menos 20 modelos y cada uno tendrá muchas funciones. Simplemente va a crear un gran archivo de modelos y probablemente también grandes vistas. ¿Cómo los divido?
Todos los modelos están relacionados, así que no puedo convertirlos en aplicaciones separadas, ¿o sí?
"Tengo al menos 20 modelos" - esta es probablemente más de una "aplicación" de Django y es más como un "proyecto" de Django con varias pequeñas "aplicaciones"
Me gusta dividir las cosas en torno a temas o áreas temáticas que tienen algunos (de 1 a 5) modelos. Esto se convierte en una "aplicación" de Django, y es la unidad útil de reutilización.
El "proyecto" general es una colección de aplicaciones que presenta lo integrado formado por piezas separadas.
Esto también ayuda a la administración del proyecto ya que cada "aplicación" puede convertirse en un sprint con un lanzamiento al final.
Esta es una necesidad bastante común ... No me puedo imaginar vadeando un archivo models.py de 10.000 líneas de largo :-)
Puede dividir el archivo models.py
(y views.py también) en un pacakge. En este caso, su árbol de proyecto se verá así:
/my_proj
/myapp
/models
__init__.py
person.py
El archivo __init__.py
convierte la carpeta en un paquete. El único problema es asegurarse de definir una Metaclase interna para sus modelos que indique la etiqueta de la aplicación para el modelo; de lo contrario, Django tendrá problemas para construir su esquema:
class Person(models.Model):
name = models.CharField(max_length=128)
class Meta:
app_label = ''myapp''
Una vez hecho esto, importa el modelo en tu archivo __init__.py
para que Django y sync lo encuentren:
from person import Person
De esta manera, aún puedes hacerlo from myapp.models import Person
Puede dividir los modelos en varios archivos. Esto también se aplica a las vistas.
Puede dividirlos en archivos separados y simplemente tener importaciones en la parte superior de su campo principal models.py.
Si realmente quieres es otra pregunta.
Tener 20 modelos en una aplicación podría ser una señal de que debes dividirla en otras más pequeñas.
El propósito de una aplicación de Django es tener un pequeño código de un solo propósito, que se ajuste a nicelly.
Por lo tanto, si tiene un sitio de comercio electrónico, es posible que tenga una aplicación shopping_cart, una aplicación de facturación, etc.
Tenga en cuenta que realmente no hay ningún problema en las aplicaciones que dependen unas de otras (aunque siempre es mejor si se pueden desacoplar), pero no debería tener una aplicación haciendo dos cosas muy distintas.
El artículo Consejos de Django: diseñar una aplicación puede ser útil. Como siempre, tome todo lo que lea con un grano de sal (incluida esta respuesta).