2010-03-10 5 views
2

Pour les modèles ci-dessous:requête Django avec des modèles connexes

class Customer(models.Model): 
    id = models.IntegerField(primary_key=True) 

class OrderA(models.Model): 
    name = models.CharField(max_length=20) 
    foo = models.FloatField() 
    customer = models.ForeignKey(Customer) 
    type = models.IntegerField() 

class OrderB(models.Model): 
    name = models.CharField(max_length=20) 
    customer = models.ForeignKey(Customer) 
    type = models.IntegerField() 

Je veux saisir tous les objets clients avec leurs objets OrderA et OrderB connexes en une seule fois pour une condition (où le type de OrderA et OrderB est égal à 1)

Répondre

0

Vous avez raison dans votre commentaire à Ignacio que select_related œuvres en t la direction opposée.

J'ai écrit sur une technique pour le faire dans cette direction on my blog (désolé pour la prise).

+1

C'est pourquoi vous ne devriez pas répondre avec un lien ... parce que maintenant le lien ne fonctionne pas et donc la réponse n'est pas utile – Christoffer

+0

Eh bien, le problème semble être avec le DNS de mon blog, pas avec le lien lui-même. Mais cette solution est maintenant obsolète pour une autre raison, à savoir que vous devriez maintenant utiliser 'prefetch_related'. –

2

select_related() sera pré-remplir les attributs appropriés:

Customer.objects.filter(ordera_set__type=1, orderb_set__type=1).select_related() 
+0

Êtes-vous sûr que le select_related fonctionne dans ce sens? Si je comprends bien, si vous l'appelez sur un objet OrderA ou OrderB, il remplira tous les objets Customer liés. – Vishal

+0

Est-il identique à: 'Customer.objects.select_related ('ordera', 'orderb'). Filter (ordera_set__type = 1, orderb_set__type = 1)' –

Questions connexes