2011-01-21 12 views
13

Tengo dos modelos como este:Django obtener objetos no referenciados por clave externa

class AA(models.Model): 
    name = models.CharField() 
    state = models.IngerField() 


class BB(models.Model): 
    aa_id = models.ForeignKey(AA) 

Mi pregunta es: ¿Cómo consigo todos los objetos con el estado de AA 10 y que no están en BB?

en SQL hago algo como esto:

select * from AA 
where AA.state = 10 and AA.id not in (select aa_id from BB) 

o

select * from AA 
left join BB on BB.aa_id = AA.id 
where AA.state = 10 and BB.id is null 

Sé que puedo conseguir todos los objetos de AA y comprobar uno por uno si BB tiene clave externa a la misma. Pero no es lo correcto.

Gracias.

Respuesta

18

Algo como esto:

AA.objects.filter(state=10, bb=None) 
+0

bb no es un campo de modelo de AA – balsagoth

+5

Sí, lo es, es el campo de relación inversa se genera automáticamente. Pruébalo, funciona. –

+0

sí funciona. Tan fácil. Gracias – balsagoth

Cuestiones relacionadas