2010-08-13 2 views
1

J'ai un problème pour transposer ma requête sql dans l'orm.django orm et 3 relations

Eh bien, cette ma demande sql:

SELECT DISTINCT accommodation.id from accommodation 
LEFT JOIN product on product.accommodation_id=accommodation.id 
LEFT JOIN date on date.product_id = product.id 
WHERE date.begin> '2010-08-13'; 

donc je veux tous les logements pour une période, sans doublon.

Mes modèles sont comme ça:

class Accommodation(models.Model): 
    ... 

class Product(models.Model): 
    ... 
    accommodation = models.ForeignKey(accommodation) 

class Date(models.Model): 
    ... 
    begin = models.DateField() 
    product = models.ForeignKey(Product) 

Donc, pour le moment je faire:

dates = Date.objects.filter(begin__gte=values['start_day'], 

     ...) 
... 
accommodations_dict = {} 

for date in dates : accommodations_dict[date.product.accommodation.slug] = True 

accommodations = Accommodation.objects.filter(slug__in=accommodations_dict.keys()) 

Eh bien, ça marche, mais il est lent, j'ai beaucoup de dates.

Donc, je pense que je peux obtenir ces logements avec sql, mais je ne sais pas comment? Si vous avez une idée, merci.

Répondre

3

Cela devrait faire ce que vous voulez:

Accommodation.objects.filter(product__date__begin__gte=values['start_day'])