Django ORM запрос к нескольким таблицам

Я пытаюсь сделать несколько запросов в Django ORM (миграция с SQL). Мои модели выглядят следующим образом


class Iv2(models.Model):
    s_id = models.AutoField(primary_key=True)
    l_eid = models.CharField(max_length=265)
    t_id = models.CharField(max_length=265,unique=True)

class Sv2(models.Model):

    id = models.AutoField(primary_key=True)
    s_id = models.OneToOneField(Iv2, on_delete=models.PROTECT)
    gdd = models.DateTimeField(default=datetime.now)


class Ev2(models.Model):

    id = models.OneToOneField(Iv2, to_field='l_eid', on_delete=models.PROTECT)
    s_id = models.ForeignKey(Iv2, on_delete=models.PROTECT)
    car = models.CharField(max_length=265)

Я хочу написать запрос, заданный t_id (некоторое реальное поисковое значение). Я хочу получить соответствующие Sv2.gdd и Ev2.car

Я думаю получить s_id и l_eid с t_id. И когда я получу s_id. Я могу запросить Sv2 и с l_eid я могу запросить Ev2.

Можно ли добиться всего одним запросом ORM? Может ли prefetch/select_related работать здесь?

"С учетом t_id Iv2 получить Sv2.gdd и Ev2.car"

Сначала получите экземпляр Sv2, отфильтровав его отношение 1:1 по реальное поисковое значение t_id:

sv2 = Sv2.objects.filter(s_id__t_id=t_id).first()
sv2.gdd

Теперь у вас есть 2 варианта получения Ev2.car

  1. Добавьте связанное имя в Ev2 (подробнее о related_name здесь ) Предполагая, что ваше related_name является ev2, вы можете сделать: sv2.ev2.car
  2. Использовать стандартное имя django related_name modelname__set sv2.ev2_set
Вернуться на верх