Джанго ищет - PullRequest
       7

Джанго ищет

0 голосов
/ 24 октября 2019

Я пытаюсь создать приложение, в котором пользователь может одновременно искать несколько названий одной категории. Fe Есть 10 названий как мексикола, красный распутин и черная магия. И мне бы хотелось, чтобы пользователь мог искать мексиколу и красный распутин, просто написав «мексикола красный распутин» или «красный распутин мексикола черная магия» или просто «черная магия» и так далее. Но теперь он работает только с одним .. я не могу найти, что не так.

Вот мои взгляды

from django.shortcuts import render
from django.db.models import Q #new

from .models import Recipe
from .models import Ingredient

def drink_list(request):
    template = "drinks/drink_list.html"
    return render(request, template)


def search_results(besos):

    query = besos.GET.get('q')
    q = Q()
    for queries in query.split():
        q = (Q(recipe_name__icontains=queries))
    results = Recipe.objects.filter(q)

    template = "drinks/search_results.html"
    context = {
        'results' : results,
    }
    return render(besos, template, context)

модель:

from django.db import models


class Ingredient(models.Model):

  ingredient_name = models.CharField(max_length=250)

  def __str__(self):
    return self.ingredient_name


class Recipe(models.Model):

  recipe_name = models.CharField(max_length=250)
  preparation = models.CharField(max_length=1000)
  ingredients = models.ManyToManyField(Ingredient)

  def __str__(self):
    return self.recipe_name

1 Ответ

0 голосов
/ 24 октября 2019

При создании фильтра наборов запросов q вы перезаписываете один и тот же экземпляр снова и снова - вместо него следует или :

    for queries in query.split():
        q = q | Q(recipe_name__icontains=queries)

В целом, однако, этот подходне будет очень быстрым, если ваша таблица станет больше (запрос займет много времени)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...