2010-11-14 18 views
5

Tengo un proyecto django que tiene dos aplicaciones, una es AppA y AppB. Ahora AppA tiene un modelo ModelA al que hace referencia el modelo ModelB en AppB, utilizando modelA = models.ForeignKey(ModelA, related_name='tricky')búsqueda inversa Django por ForeignKey

ahora en mi opinión para AppA, cuando muestra ModelA, hago un get_object_or_404(ModelA, pk=prim_id). Entonces quiero obtener todos los ModelB s que tienen una clave externa que apunta a ModelA.

Documentación dice que debería hacer un mb = ModelB.objects.get(pk=prim_id) continuación mb.modela_set.all()

embargo, fracasó en la mb.modela_set, y dice "ModelB object has no attribute 'suchsuch'". Observe que agregué el campo related_name a ForeignKey, así que probé con eso también, incluyendo mb.tricky.all() y mb.tricky_set.all() en vano.

Ah, y he especificado un administrador diferente para AppA donde hago objects = MyManager() que devuelve la consulta normal pero con un filtro aplicado.

¿Cuál podría ser el problema? ¿Cuál es la forma preferida de obtener ModelB haciendo referencia a ModelA?

+0

Ah, lo eché a perder, debería haber llamado a ModelA.tricky.all() para que los modelos se refirieran a ModelA ... en lugar de lo que tenía era ModelB.tricky.all() Gah. – rapadura

+0

Si crees que describiste tu pregunta incorrectamente, edítala para que esté correcta. ¡También puede incluir su código de administrador! –

+0

@lazerscience, Nah lo describí correctamente. – rapadura

Respuesta

4

Si el ForeignKey es, como usted la describe en ModelB y lo hace mb = ModelB.objects.get(pk=prim_id) entonces el mirar hacia arriba para el atributo modela no es una búsqueda inversa. ¡simplemente tiene acceso al objeto relacionado a través del mb.modela!

+1

Sí, pero estaba tratando de hacer ModelB.modela_set.all() para obtener los referenses de modelB a modelA. No presté atención en la documentación en http://docs.djangoproject.com/en/dev/topics/db/queries/ (realizando consultas inversas) que ModelA (Blog en el documento) no tenía un campo ForeignKey para otro modelo. Más bien es ModelA (Blog) que tiene un FOO_set.all() de todas las referencias de otro modelo. Acepto su respuesta porque sigue siendo correcta y para que otros la encuentren. – rapadura

Cuestiones relacionadas