2016-10-29 2 views
0

Рассмотрим эти моделиИспользование Right Регистрация и ГДЕ В пункте

class SearchableText(models.Model): 
    searchable_text = models.TextField() 

class SearchTerm(models.Model): 
    searchabletext = models.ForeignKey(SearchableText, on_delete=models.CASCADE) 
    term = models.CharField(max_length=100) 

Я хочу написать эквивалент этого SQL заявления с помощью Джанго ОРМ

Select SearchableText.* right join SearchTerm on SearchTerm.searchabletext=SearchableText.id where SearchTerm.term in ("term 1","term 2","term 3") 

Я также хочу заказать результат в зависимости от количества согласованные термины, но я предполагаю, что это даст еще один вопрос.

ответ

0

Вы можете использовать функцию Q. Я думаю, что это может быть запрос вы ищете:

from django.db.models import Q, F 

SearchableText.objects.filter(Q(id=F('searchterm__searchabletext')), searchterm__term__in=['term1', 'term2', 'term3']) 

сгенерированного запроса SQL, как это:

SELECT app_searchabletext.* FROM app_searchabletext INNER JOIN app_searchterm ON (app_searchabletext.id = app_searchterm.searchabletext_id) WHERE (app_searchabletext.id = (app_searchterm.searchabletext_id) AND app_searchterm.term IN (term1, term2, term3)) 
Смежные вопросы