Как оптимизировать запрос здесь с select_related? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть

class A(models.Model):
    field_a = models.OneToOneField(B, on_delete=models.CASCADE)

class B(models.Model):
    field_b = models.charField()

Как написать наиболее оптимальный запрос здесь, используя select_related или что-то еще? В моем случае мне нужно использовать и field_a модели A и field_b модели B где-нибудь в моем коде. Так могу ли я получить оба объекта за одно попадание в дб?

queryset_b = B.objects.get(field_b="some name")
queryset_a = A.objects.get(b=queryset_b).field_a
field_a_of_model = queryset_a
field_b_of_model = queryset_b.field_b
# then some manipulation with both fields

дважды попадет в дб. Могу ли я сделать это за один удар по дб, используя select_related, чтобы он выбирал оба объекта одновременно?

1 Ответ

0 голосов
/ 20 апреля 2020

Вы можете использовать поиск, который охватывает отношение охвата

a = A.objects.get(b__field_b="some name")

Это приведет к одному запросу к базе данных


Если вы хотите, чтобы один запрос обращался к полям из б тоже используйте select_related()

a = A.objects.select_related().get(b__field_b="some name")
a.field_a.field_b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...