Django получает различные иностранные ключи из набора запросов - PullRequest
0 голосов
/ 24 мая 2011

У меня большая база данных MySQL на django, и я изо всех сил пытаюсь заставить ее работать эффективно:

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 )

Я бы хотел получить все активные категории на основе набора запросов Article. Я действительно делаю это так:

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 возвращает около 50 тыс. Результатов, так что это вообще не эффективно.

Есть идеи или указатели?

Спасибо!

1 Ответ

0 голосов
/ 24 мая 2011

У меня наконец-то получилось с этим поработать:

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!

...