Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 3, 2009 16:41:57

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать запрос через ОРМ?

Есть три таблицы

class A(models.Model): #Справочник
ax = models.IntegerField() #Данные

class B(models.Model):
a = models.ForeignKey(A) #Множество дополнительных
bx = models.IntegerField() #данных

class C(models.Model): # Прецеденты
a = models.ForeignKey(A)
Такая схема предполагает следующие запросы, которые используются в программе.
 C.objects.select_related('a__ax').all()
B.objects.select_related('a__ax').all()
Но кроме того нужны и такие запросы
SELECT * from C c
LEFT JOIN B b ON b.a_id = c.a_id
Как такой запрос сделать при существующей схеме? Желательно без обращения к A…



Отредактировано (Дек. 3, 2009 17:02:00)

Офлайн

#2 Дек. 3, 2009 19:00:29

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Как сделать запрос через ОРМ?

Nick2009
Как такой запрос сделать при существующей схеме?
Такое конечно сделать можно например так:
qs = C.objects.all()
qs.query.as_sql()
qs.query.join(
(C._meta.db_table, B._meta.db_table, C._meta.get_field('a').attname, B._meta.get_field('a').attname),
promote=True
)
Но лучше этого не делать и изменить схему.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version