私は4つの検索フィールドでカスタム検索エンジンを作成しようとしています。私はmysqlテーブル内を検索したい。raw mysqlを使ったdjangoの検索
これは、検索、ページ付けのためのviews.pyの一部であり、テーブルデータ全体をリストします。
def addview(request, table_id):
try:
table_name = Crawledtables.objects.get(id=table_id)
tbl_details = "SELECT * FROM " + table_name.name
tbl_detail = AllTables.objects.raw(tbl_details)
paginator = Paginator(list(tbl_detail), 100)
page = request.GET.get('page')
try:
details = paginator.page(page)
except PageNotAnInteger:
details = paginator.page(1)
except EmptyPage:
details = paginator.page(paginator.num_pages)
q = request.GET.get("q")
title_search = """SELECT * FROM """ + table_name + """ WHERE `Title` LIKE '\%""" + q + """\%' """
# title_search = """SELECT id,description, MATCH (title) AGAINST (""" + q + """ IN BOOLEAN MODE) " \
# FROM """ + table_name + """ ORDER BY id DESC;"""
search_title = AllTables.objects.raw(title_search)
return render(request, 'tables/table_list.html', {'tbl_name': table_name,
'details': tbl_detail,
'search': search_title,
'detail_page': details})
except AllTables.DoesNotExist:
raise Http404()
、これは動的テーブルクラスと私のmodels.pyの一部です。
@python_2_unicode_compatible
class AllTables(models.Model):
title = models.TextField(db_column='Title', blank=True, null=True)
url = models.CharField(db_column='Url', unique=True, max_length=250, blank=True,
null=True)
description = models.TextField(db_column='Description', blank=True, null=True)
class Meta:
managed = False
def __str__(self):
return self.url
def __unicode__(self):
return self.title
私は私が過去一週間のために働いて、この検索を取得しようとしてきたviews.py
Traceback (most recent call last):
File "/home/omega/venv/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/omega/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/omega/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/srv/tester/tables/views.py", line 52, in addview
title_search = """SELECT * FROM """ + table_name + """ WHERE `Title` LIKE '\%""" + q + """\%' """
TypeError: coercing to Unicode: need string or buffer, NoneType found
からtitle_searchのいずれかを使用して取得し、私が求めていましエラーそれについて...さまざまなタイプのメソッドを使用しています。例:elasticsearch、干し草、等...
UPDATE
私はあなたが言ったようにviews.pyを変更しませんでした。私はもうエラーは表示されません...しかし、私はどんな結果も得られません。
これは彼らはただそこにある..私は唯一title_search ...私はタイトルの修正を取得した後に何をするつもり他の1つのIMをした私のtable_list.html
<h3>Search Engine</h3>
<form class="navbar-form navbar-left" role="search" method="get" action="{% url 'tables:details' table_id=tbl_name.id%}">
<div class="form-group">
<input placeholder="Title" type="text" class="form-control" name="Title" value="">
<input placeholder="Url" type="text" class="form-control" name="Url" value="">
<input placeholder="Description" type="text" class="form-control" name="Description" value="">
</div>
<button type="submit" class="btn btn-default">Search</button>
</form>
<p>You searched for open sections of: <strong>{{ query }}</strong></p>
{% if search %}
<p>Found {{ search|length }} section{{ search|pluralize }}.</p>
<ul>
{% for section in search %}
<li>{{ section.title }}</li>
<li>{{ section.url }}</li>
<li>{{ section.description }}</li>
{% endfor %}
</ul>
{% else %}
<p>No open sections found.</p>
{% endif %}
の一部です。 html。 この検索エンジンの修正 を得ることに私を助けてくださいあなたはq
がrequest.GET
q = request.GET.get("q")
if q is not None:
title_search = """SELECT * FROM """ + table_name + """ WHERE `Title` LIKE '\%""" + q + """\%' """
# title_search = """SELECT id,description, MATCH (title) AGAINST (""" + q + """ IN BOOLEAN MODE) " \
# FROM """ + table_name + """ ORDER BY id DESC;"""
search_title = AllTables.objects.raw(title_search)
else:
search_title = []
ご入力されていない場合を処理する必要が名前を持っている
に「タイトル」を探す必要があり、それは私にこれ以上のエラーを与えるものではありません...ありがとう...しかし、それは私に何も結果を与えるものではありません私がタイトルを検索するとき。私はあなたの質問をtable_list.htmlコードで更新しようとしています – Omega
私の答えを更新しました。手作業ではなくDjangoフォームを実際に使うべきです。何らかの理由で生のクエリ –
を実行するのではなくORMを使うべきです。 GET.getは動作していません...私はプリントを使って何がプリントアウトされているかを見て、プリントアウトします。私はあなたにDjangoのフォームが欲しかった...しかし、私はそれをこのように働かせるためにいくつかの答えを探していた...と私は答えを見つけることができませんでした.... – Omega