django orm和3关系

时间:2010-08-13 15:26:41

标签: python django orm

我有问题在orm中转置我的sql请求。

好吧,这是我的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';

所以我想要一段时间的所有住宿,没有怀疑。

我的模特是这样的:

class Accommodation(models.Model):
    ...

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

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

所以暂时我这样做:

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())

嗯,它有效,但它很慢,我有很多约会。

所以我想我可以用sql获得这些住宿,但我不知道怎么做?

如果你有想法, 感谢。

1 个答案:

答案 0 :(得分:3)

这应该做你想要的:

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