2011-09-21 2 views
2

J'essaie de faire une recherche SQL inversée en utilisant Django 1.3. J'ai trouvé beaucoup de questions connexes, mais malheureusement je ne peux trouver la réponse que pour faire cela sur un seul enregistrement, pas sur plusieurs enregistrements à la fois.Comment faire une recherche de clé étrangère inversée pour tous les enregistrements dans Django?

En fait, c'est mon cas: j'ai un modèle « techniques » qui ressemble à ceci:

class Technique(models.Model): 
    title = models.CharField(max_length=32) 
    description = models.CharField(max_length=256) 
    skill_level = models.IntegerField() 
    parent_technique = models.ForeignKey('self', blank=True, null=True) 

Au moment où je viens de faire une liste de toutes les techniques de sans famille.

t = get_list_or_404(Technique.objects.filter(parent_technique=None)) 

maintenant ce que je veux (ou au moins pense que je veux) est que toutes les entrées de t get « » Childs un champ d'addition qui répertorie toutes les techniques qui liste la technique actuelle comme leur parent. Est-ce que quelqu'un peut m'aider avec ça?

Aussi, si leur est une autre façon d'obtenir ce que je veux, n'hésitez pas à contribuer. Je viens juste de commencer à utiliser Django, donc je ne connais peut-être pas d'autres moyens.

Merci beaucoup d'avance!

Répondre

4

dans le modèle ajouter related_name

parent_technique = models.ForeignKey('self', blank=True, null=True, related_name="childrens_tech") 

toutes les techniques enfants de smt_technique sont

smt_technique.childrens_tech.all() 
+1

C'est fait. Merci beaucoup! :) – lunanoko

8

C'est intégré déjà - voir following relations backwards.

Dans votre cas, il suffit de faire:

obj.technique_set.all() 

pour chaque obj dans t.

+0

Le "_set" est la clé. La principale chose à remarquer :) – akki

Questions connexes