Django搜索

时间:2019-10-24 18:44:55

标签: python django search django-q

我正在尝试让用户可以同时查找一个类别的几个名称的应用。 F.e.有10个名字,例如墨西哥墨西哥卷,红色拉皮丁和黑魔法。我希望用户只需写“ mexicola red rasputin”或“ red rasputin mexicola black magic”或“ black magic”等即可查找mexicola和Red rasputin。但是现在它只能与一个一起使用。.我找不到错误所在。

这是我的观点

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 :(得分:0)

在构造查询集过滤器q时,您一次又一次地覆盖同一实例-您应该-它代替:

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

但是,一般来说,如果表变大(查询将花费很长时间),这种方法将不会很快。