Вот мой запрос:запроса оптимизации с Django
- У меня есть
Personne
модель, которая может иметь один или несколько поездок черезPersonneTravel
. - В
PersonneTravel
, тоtravel
поле является внешним ключом кTagWithValue
s
является «начало» дата, как «1954-05-01»e
является дата окончания, как «1999-05-01»travel
является строкой, как «Париж, Франция»
Так я делаю основной «поиск» для фильтрации, который сделал путешествие и когда.
Вот как я это делаю, и, поскольку я новичок с Джанго, я уверен, что это может быть оптимизировано:
- я получить все
pk
изTagWithValue
, которые имеют соответствующиеvalue
- я получить все
pk
PersonneTravel
, которые имеют соответствующий ход те рк, прежде чем - я получить все
Personne
, который соответствуетPersonneTravel
рк перед тем
Я хотел бы вернуться только один присоединиться, как это (это не хорошо SQL конечно, но только, чтобы получить большую идею):
SELECT ALL PersonneTravel PT
JOIN Personne P on P.personne_travel__pk = PT.pk
JOIN TagWithValue T
WHERE T.personne__pk = P.pk
AND T.value = "Paris, France"
AND T.tag = TYPE_GOOGLEMAPS
Есть ли способ, чтобы оптимизировать это и сделайте это с помощью моего следующего кода?
q = Q()
if s:
q = q & Q(date_start__gte=s)
if e:
q = q & Q(date_end__lte=e)
retour = [a[0] for a in TagWithValue.objects.filter(
type_tag__exact=BaseTag.TYPE_GOOGLEMAPS,
value__exact=travel).values_list('pk')]
retour = PersonneTravel.objects.filter(Q(travel__in=retour) & q)\
.values_list('personne__pk')
if len(retour):
retour = Personne.objects.filter(pk__in=retour)
Пожалуйста, разместите ваши модели. – ilse2005
Это было бы, если бы вы могли предоставить информацию о модели. Предполагая структуру, я добавил ответ. Пожалуйста, 'Примите' и' Upvote' мой ответ, если он решит вашу проблему :) –