Джанго: поиск из разных таблиц в Джанго
Я пытаюсь реализовать функциональность поиска для пользователя в Django.
я могу использовать Q
для одного поиска таблицы, но здесь scenerio отличается.
Вот мои модели:
Class Profile(models.Model)
name = models.OnoeToOneField(User)
category = models.ForeignKey(Category)
Tags = models.ForeignKey(Tags)
class Category(models.Model)
name = models.Charfield(max_length = 100)
sub_cat = models.ForeignKey(SubCategory)
Я хочу найти пользователя, который принадлежит к категории и / или тегу
Но я не могу найти способ сделать это. Я не хочу использовать Haystack или Whoosh.
Пожалуйста, предложите мне простой способ добиться этого.
2 ответа
Вы пробовали такой набор запросов?
User.objects.filter(
Q(profile__category__name__icontains=search_string) |
Q(profile__Tags__name__icontains=search_string)
).distinct()
См. Сложные поиски с объектами Q для деталей.
Обратите внимание, что я использую distinct()
исключить повторяющиеся результаты, поскольку один и тот же пользователь может быть выбран по двум причинам (каждая из которых соответствует объекту Q).
(Конечно, вы должны адаптировать Tags__name
который я поставил как есть для примера, но у меня нет источника модели тегов).
На самом деле это очень просто:
Фильтр с названием категории:
Profile.objects.filter(category__name__iexact='category 1')
Фильтр с идентификатором категории:
Profile.objects.filter(category__pk=27)
Фильтр с именем подкатегории:
Profile.objects.filter(category__sub_cat__name__iexact='exact sub category name')