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
- Добавьте связанное имя в Ev2 (подробнее о related_name здесь )
Предполагая, что ваше
related_name
являетсяev2
, вы можете сделать:sv2.ev2.car
- Использовать стандартное имя django related_name
modelname__set
sv2.ev2_set