2010-04-09 4 views
0

Comment faire pour interroger des employés pour obtenir toutes les adresses liées à l'employé, Employee.Add.all() ne fonctionne pas ..requêtes dans django

class Employee(): 
    Add = models.ManyToManyField(Address) 
    parent = models.ManyToManyField(Parent, blank=True, null=True) 

class Address(models.Model): 
    address_emp = models.CharField(max_length=512) 
    description = models.TextField() 

    def __unicode__(self): 
    return self.name() 
+0

Vouliez-vous dire vraiment écrire 'Employee.Add.all()'? 'Employee' est la classe, pas une instance. –

Répondre

5

Employee.objects.get (pk = 1) .Add.all (

Vous devez afficher pour lequel employé voulez-vous dire. pk=1 est évidemment un exemple (employé avec clé primaire égale à 1). Par ailleurs, il existe une forte convention pour utiliser des minuscules pour les noms de champs. Employee.objects.get(pk=1).addresses.all() serait beaucoup mieux.

2

Employee.Add.all() ne fonctionne pas car vous essayez d'accéder à un champ associé à partir du modèle et ce type de requêtes nécessite une instance du modèle, comme l'exemple de Ludwik. Pour accéder à un modèle et son champ de clé étrangère liée dans la même requête que vous devez faire quelque chose comme ceci:

Employee.objects.select_related('Add').all() 

Cela ferait l'affaire.

0

employee = Employee.objects.prefetch_related('Add') [emp.Add.all() for emp in employee]

prefetch_related soutient de nombreuses relations et met en cache l'ensemble des requêtes et réduit la base de données frappe augmente donc les performances ..

Questions connexes