Как сделать эффективные запросы в Django? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть следующие модели, относящиеся к встроенным моделям Django Tag и Site.Учитывая Site, каков наиболее эффективный способ запроса всех связанных Tag s

class InlineTag(models.Model):
    tag = models.ForeignKey(Tag, null=False)
    topic = models.ForeignKey(Topic, null=False)
    order = models.PositiveIntegerField(null=False, blank=True)

class Topic(models.Model):
    description = models.CharField(max_length=255, blank=False)
    sites = models.ManyToManyField(Site)

В настоящее время я делаю этот способ, он кажется слишком сложным:

tags = []
current_site = Site.objects.get_current()
topics = Topic.objects.filter(sites=current_site)

for topic in topics:
    inline_tags = InlineTag.objects.filter(topic=topic)

    for inline_tag in inline_tags:
        tags.append(inline_tag.tag)

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете использовать обратный поиск по внешнему ключу , чтобы получить все теги в одном запросе:

tags = Tag.objects.filter(inlinetag__topic__sites=current_site).distinct()

distinct() гарантирует, что вы не получите повторяющиеся результаты, например,если на сайте есть несколько тем с одинаковыми тегами.

Как примечание, у Django нет встроенной модели Tag - возможно, вы используете стороннее приложение для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...