【问题标题】:Django searchingDjango 搜索
【发布时间】:2020-02-21 03:40:33
【问题描述】:

我正在尝试制作用户可以同时查找一个类别的几个名称的应用程序。 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

【问题讨论】:

    标签: python django search django-q


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2011-12-08
      • 2019-06-16
      • 2016-12-31
      • 2019-04-21
      • 2020-10-11
      相关资源
      最近更新 更多