Как мне объединить две модели в Django по id? - PullRequest
1 голос
/ 06 мая 2020

У меня есть две модели, как показано ниже, с несколькими полями:

class Query(models.Model):
    query_text = models.TextField(blank=True, null=True)
    variable = models.CharField(max_length=250, blank=True, null=True)

class Statistic(models.Model):
    query = models.ForeignKey(Query, models.DO_NOTHING, blank=True, null=True)
    processing_time = models.DateTimeField(blank=True, null=True)
    module = models.CharField(max_length=500, blank=True, null=True)

Моя цель - выполнить JOIN с использованием идентификатора двух моделей. Эквивалент запроса SQL будет выглядеть так:

SELECT * FROM statistic S JOIN query Q ON S.query_id = Q.id

Я так понимаю, select_related или prefetch_related могут помочь? Я не знаю, какой из них использовать для соединения. Буду признателен за помощь в этом. Спасибо. :)

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Вы должны использовать select_related здесь, так как у вас отношение ForeignKey. (prefetch_related для полей ManyToMany).

Итак,

some_id_value = 12
stats_queryset = Statistic.obects.select_related("query").filter(id=some_id_value)
0 голосов
/ 06 мая 2020

Для этого можно использовать select_related. Вы можете убедиться, что JOIN используется, вызвав атрибут query набора запросов, который покажет вам необработанный SQL оператор:

print(Statistic.obects.select_related("query").query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...