我是Django新手,试图创建一个“搜索”形式为我的项目使用MySql与MyISAM引擎。到目前为止,我设法让表单起作用,但Django似乎并没有以相同的方式搜索所有字段。结果是随机的。例:虽然howtogetin
似乎并不适用于region
返回任何结果或description
最坏的搜索工作正常..如何使用QuerySets和MySql“全文搜索”在多个字段中进行Django搜索?
这里是我的模型:
class Camp(models.Model):
owner = models.OneToOneField(User)
name = models.CharField(max_length=100)
description = models.TextField()
address1 = models.CharField(max_length=128)
address2 = models.CharField(max_length=128)
zipcode = models.CharField(max_length=128)
region = models.CharField(max_length=128)
country = models.CharField(max_length=128)
phone = models.CharField(max_length=60)
howtogetin = models.TextField()
def __str__(self):
return self.name
这是我的观点:
def campsearch(request):
if request.method == 'POST':
form = CampSearchForm(request.POST)
if form.is_valid():
terms = form.cleaned_data['search']
camps = Camp.objects.filter(
Q(name__search=terms)|
Q(description__search=terms)|
Q(address1__search=terms)|
Q(address2__search=terms)|
Q(zipcode__search=terms)|
Q(region__search=terms)|
Q(country__search=terms)|
Q(howtogetin__search=terms)
)
return render(request, 'campsearch.html', {'form':form, 'camps':camps})
else:
form = CampSearchForm()
return render(request, 'campsearch.html', {'form':form})
任何线索?
我在互联网上看到过类似的东西,但我无法弄清楚它的工作方式。你测试过了吗?你能解释为什么它比Django的默认实现** **和**不包含**更好的实现吗? – adilbenseddik 2014-10-29 21:48:36
嗨adilbenseddik,是的,我有它在我的项目,它很好。这种方法是由Julien Phalip在http://julienphalip.com/post/2825034077/adding-search-to-a-django-site-in-a-snap – 2014-10-29 21:53:59
给我一试。 thx供参考。然而,你有什么不知道我的代码不工作吗?根据Django的文档,它应该工作得相当开箱。 – adilbenseddik 2014-10-29 22:12:14