Cuál es la diferencia entre poner ‘app.model’ y solo el nombre del modelo en el campo Foreignkey o ManyToManyField?

Adrian González

Adrian González

Pregunta
studenthace 6 años

Cuál es la diferencia entre poner ‘app.model’ y solo el nombre del modelo en el campo Foreignkey o ManyToManyField?

2 respuestas
para escribir tu comentario
    Eduardo José Álvarez

    Eduardo José Álvarez

    Team Platzihace 6 años

    Cuando pones como

    string
    la clase a la que hace referencia te evitas el problema de dependencia cíclica.

    Andres Rodriguez

    Andres Rodriguez

    studenthace 6 años

    Cuando pasas una clase de python a la función ForeignKey o ManyToManyField, Django debe resolver la clase que pasas por parametro, lo que puede llevar a un problema de dependencia cíclica si tus modelos dependen uno de otro de forma cíclica. Esto es un problema que se puede solucionar deshaciendo estas dependencias cíclicas, modelandolas de una forma diferente.

    Muchas veces, la naturaleza de tus modelos es así, cíclica, y no puedes evitarlo. Es en ese caso cuando usas una lazy-relationship del tipo 'app.model'. Si te fijas, estás pasando un string de python, y no una clase, y por tanto Django no necesita resolver ningún modelo para terminar de resolver otro, eliminando el problema de la dependencia cíclica.

Curso Avanzado de Django

Curso Avanzado de Django

Sitios increíbles como Platzi, Instagram, Pinterest o el portal del New York Times tienen algo en común: todos usan Django. Aprovecha su versatilidad, potencia y rapidez para mostrar tus ideas y dar rienda suelta a tu creatividad. Aprende Django con Platzi y ¡haz de tu próximo sitio web el mejor que el mundo haya visto!

Curso Avanzado de Django

Curso Avanzado de Django

Sitios increíbles como Platzi, Instagram, Pinterest o el portal del New York Times tienen algo en común: todos usan Django. Aprovecha su versatilidad, potencia y rapidez para mostrar tus ideas y dar rienda suelta a tu creatividad. Aprende Django con Platzi y ¡haz de tu próximo sitio web el mejor que el mundo haya visto!