django从查询集中获取不同的外键

时间:2011-05-24 15:10:44

标签: mysql django performance django-queryset

我有一个很大的django MySQL数据库,我正努力让这个有效地工作:

models.py:

class Category(models.Model)
    name = models.CharField()

class Article(models.Model)
    start_date = models.DateTimeField(...)
    end_date = models.DateTimeField(...)
    active = models.BooleanField(...)
    categories = models.ManyToManyField( Category )

我想根据文章查询集获取所有活动类别。我实际上是这样做的:

actives_articles = Articles.objects.filter(start_date__gt = datetime.datetime.today(), end_date__lt = another_date, active = True)
actives_categories = Category.objects.filter(article__in = actives_articles).distinct().order_by('name')

actives_articles返回大约50k的结果,所以这根本没有效率。

任何想法或指示?

谢谢!

1 个答案:

答案 0 :(得分:0)

我终于有了一些工作:

now = datetime.datetime.now()
filters  = {
    'article__active': True,
    'article__start_date__lte':now,
    'article__end_date__gte':now,
}
categs = Category.objects.filter(**filters).distinct()
傻傻的,谢谢Django!