Django 搜索

Django searching

我正在尝试制作一个用户可以同时查找一个类别的几个名称的应用程序。 F.e。有 10 个名字,例如 mexicola、red rasputin 和 black magic。我希望用户可以通过写 "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

构建查询集过滤器 q 时,您会一次又一次地覆盖同一个实例 - 您应该 -改为:

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

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