我正在創(chuàng)建一個網(wǎng)站,用戶可以在其中搜索配料的食譜,但我只能通過輸入 1 種配料進(jìn)行搜索,當(dāng)我輸入一種以上時,搜索返回空。 正確的搜索應(yīng)該是用戶插入多種成分并返回包含這些成分的食譜。 我找不到哪里出了問題:(這是我的models.pyclass Fotos(models.Model): id = models.AutoField(primary_key=True) linkfoto = models.ImageField() nomes = models.ForeignKey('Nomes', models.DO_NOTHING, blank=True, null=True) class Meta: managed = False db_table = 'fotos'class Ingredientes(models.Model): id = models.AutoField(primary_key=True) ingrediente = models.TextField() nomes = models.ForeignKey('Nomes', models.DO_NOTHING, blank=True, null=True) class Meta: managed = False db_table = 'ingredientes'class Nomes(models.Model): id = models.AutoField(primary_key=True) # AutoField? nome = models.TextField() class Meta: managed = False db_table = 'nomes'視圖.pyfrom django.shortcuts import renderfrom .models import Ingredientes, Nomes, Fotosdef post_list(request): termo_busca = request.GET.get('pesquisa') if termo_busca: a = Ingredientes.objects.all().filter(ingrediente__contains=termo_busca) # a = a.exclude(ingrediente__icontains=termo_busca!=termo_busca) busca = [p.nomes_id for p in a] lista = [] for i in busca: nome = Nomes.objects.get(id=i) ingredientes = Ingredientes.objects.filter(nomes_id__in=[i]) foto = Fotos.objects.get(id=i) lista.append([nome, ingredientes, foto]) else: a = Nomes.objects.all()[:10] cont = len(a) lista = [] for i in range(1, cont): nome = Nomes.objects.get(id=i) ingredientes = Ingredientes.objects.filter(nomes_id__in=[i]) foto = Fotos.objects.get(id=i) lista.append([nome, ingredientes, foto]) return render(request, 'aplicacao/post_list.html', {'lista': lista})
1 回答

慕妹3242003
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個贊
首先使用
ingrediente__icontains
因?yàn)樵谀愕那闆r下,“檸檬”和“檸檬”不一樣。我猜用戶在 html input或textarea中輸入搜索詞。您需要使用一些規(guī)則來限制輸入。示例用戶必須使用空格分隔成分。請參閱正確的搜索字符串。
檸檬魚鹽 那么在你看來你需要一一獲取它的成分???/p>
if termo_busca:
all_ingred = Ingredientes.objects.all()
searching_ingred = Ingredientes.objects.none()
for one_ingredient in termo_busca.split():
searching_ingred = searching_ingred.union(searching_ingred, all_ingred.filter(ingrediente__icontains=one_ingredient))
# do some with ingredients that match searching
添加回答
舉報
0/150
提交
取消