Nano Hash - криптовалюты, майнинг, программирование

Использование Django Q для получения результатов поиска от CBV

Я пытаюсь реализовать простую функцию поиска в ListView моего CBV ниже, как выглядит мой ListView

class Postlist(SelectRelatedMixin, ListView):
    model = Post
    select_related = ('user', 'group')

Я хотел бы добиться чего-то подобного (Источник: Видео на YouTube о том, как добавить поиск

def post_list(request):
    posts = Post.objects.all()
    query = request.GET.get('q')
    if query:
        posts = Post.objects.filter(
            Q(title__icontains=query)|
            Q(user__username=query)|
            Q(body__icontains=query)

        )
    context = {
        'posts': posts,
    }
    return render(request, 'blog/post_list.html', context)

но я думаю, что не могу объяснить SelectRelatedMixin. Я в порядке с использованием любого. FBV или CBV, пока у меня работает поиск

Я попробовал код ниже. Я получаю NameError: имя «запрос» не определено

class Postlist(SelectRelatedMixin, ListView):
    model = Post    

    posts = Post.objects.filter(
        Q(title__icontains=query) |
        Q(user__username=query) |
        Q(body__icontains=query)
    ).select_related('user', 'group')

  • Что такое SelectRelatedMixin? А что плохого в функциональном представлении, если оно делает то, что вы хотите? 09.04.2018
  • И почему вы не можете сделать это с функциональным представлением? 09.04.2018
  • С какой проблемой вы столкнулись? Нам нужно больше информации 09.04.2018

Ответы:


1

В функциональном представлении вы можете просто вызвать select_related() в своем наборе запросов.

posts = Post.objects.filter(
    Q(title__icontains=query)|
    Q(user__username=query)|
    Q(body__icontains=query)
).select_related('user', 'group')

В представлении на основе классов вы можете переопределить get_queryset:

class Postlist(SelectRelatedMixin, ListView):
    model = Post
    select_related = ('user', 'group')

    def get_queryset(self):
        queryset = super(Postlist, self).get_queryset()
        query = self.request.GET.get('q')
        if query:
            queryset = queryset.filter(
                Q(title__icontains=query)|
                Q(user__username=query)|
                Q(body__icontains=query)
            )
        return queryset
09.04.2018
  • Это то, что вы имеете в виду? Если я это сделаю, я получаю NameError: имя «запрос» не определено class Postlist (SelectRelatedMixin, ListView): model = Post posts = Post.objects.filter( Q (title__icontains = запрос) | Q (user__username =запрос) | Q(body__icontains=запрос) ).select_related('пользователь', 'группа') 09.04.2018
  • Пожалуйста, не оставляйте код в комментариях, его невозможно прочитать. posts = Post.objects.filter(...) предназначен для представления на основе функций. Если вы используете представление на основе классов, переопределите get_queryset, как в моем ответе. 09.04.2018
  • спасибо, что сработало. также обратите внимание на добавление кода в комментарии 09.04.2018
  • как вы думаете, вы могли бы помочь мне с аналогичным вопросом django stackoverflow.com/questions/49588341/ 09.04.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..