2009-02-12 12 views
29

Quiero tener dos claves ajenas al mismo modelo:¿Cómo puedo tener dos claves externas para el mismo modelo en Django?

class Test(models.model): 
    example1 = models.ForeignKey(Example) 
    example2 = models.ForeignKey(Example) 

que recibo errores como:

Accessor para enfrentamientos '' example1 de campo con campo relacionado 'Example.test_set'. Agregue un argumento related_name a la definición de 'example1'.

Respuesta

17

Django usa un poco de magia pitón para definir las relaciones entre los modelos, algunos de los cuales consiste en utilizar el nombre de los modelos en las relaciones (que es donde la 'prueba' en " test__set 'viene de.) Lo que está sucediendo, supongo, es que está tratando de poner "test__set" en el modelo de Ejemplo dos veces, una por cada clave foránea que haya definido.

El mensaje de error sugiere algo que probar: defina un argumento related_name (anulando uno de esos 'test_set's') que puede usar en lugar de generar automáticamente dos nombres conflictivos.

Más información here

+2

Este enlace más información ya no funciona –

92

Intente utilizar related_name:

class Test(models.model): 
    example1 = models.ForeignKey('Example', related_name='example1') 
    example2 = models.ForeignKey('Example', related_name='example2') 
+1

Tengo dos modelos en la aplicación que intenta hacer esto. El segundo funciona bien con este método: tiene claves foráneas para el primer modelo. El primer modelo no funciona. Tal vez sea porque se está refiriendo a un modelo importado en su lugar. ¿Alguien ha hecho esto para trabajar con modelos importados? – SpiRail

7

Eso sí, lo que el mensaje de error dice que hagas, y si no está seguro de lo que eso significa, consulte la documentación de related_name.

Cuestiones relacionadas