2011-01-16 13 views
5

Quiero saber cuál es la diferencia entre estas dos definiciones de clave foránea.Django: por qué hay comillas alrededor del modelo en una definición ForeignKey

(1) MyFKField = models.ForeignKey('MyModel') 
(2) MyFKField = models.ForeignKey(MyModel) 

entiendo (creo ...) que (1) MyModel necesita ser definida en el mismo archivo y el otro necesita ser importados, pero estoy seguro de la razón/benifits de hacerlo de cualquier manera.

He echado un vistazo a los documentos de Django pero no pude encontrar nada, y tampoco estoy seguro de si este es el lugar adecuado para preguntar, así que le pido disculpas si no.

Saludos

Respuesta

5

Django docs estados que utilizaría una cadena a (1):

  • quieres una relación recursiva (por ejemplo - model.ForeignKey('self'))
  • Para referirse a un modelo que, posiblemente, no está definido todavía (por cíclica relaciones).
  • Un acceso directo para referirse a un modelo en otra aplicación (por ejemplo - model.ForeignKey('app.mymodel'))

Pero, en general, especificando la clase de modelo directamente está claro dónde viene a partir de (2).

6

sin comillas, es una referencia a un modelo bien definido dentro del archivo o importados a través de import. Con comillas, Django se hace responsable de encontrar el modelo entre todos los modelos en todas las aplicaciones instaladas.

+0

¿Eso significa que con comillas, no es necesario importar el modelo? – neolaser

+2

Sí. Pero Django tarda (muy) poco más en resolverlo que hacerlo en Python. –

+0

@ IgnacioVazquez-Abrams ¿Sabría usted si este sigue siendo el caso? Si es así, ¿por qué la documentación de django usa la versión citada? –

0

Si la definición de la clase MyModel está bajo la definición de clase MyFKField (en el código), entonces debe escribirla entre comillas.

Cuestiones relacionadas