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 变大(查询将花费很长时间),这种方法不会很快
我正在尝试制作一个用户可以同时查找一个类别的几个名称的应用程序。 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 变大(查询将花费很长时间),这种方法不会很快