Найти - Пользователи
Полная версия: Как сделать запрос через ОРМ?
Начало » Django » Как сделать запрос через ОРМ?
1
Nick2009
Есть три таблицы
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…
Александр Кошелев
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
)
Но лучше этого не делать и изменить схему.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB