Я пытаюсь получить информацию из таблицы базы данных из поиска. На сайте, на котором я работаю, пользователь вводит какой-либо текст в поисковый запрос и получает список результатов, которые затем могут щелкнуть, чтобы найти дополнительную информацию. Теперь вещь то будет топтаться меня, я могу получить это прекрасно работает со следующим кодом:Django Raw SQL Not Getting ID
views.py
from models import Person
from django.template.loader import get_template
from django.template import Context
def search(request):
q = request.GET.get("q")
if q:
results = Person.objects.filter(name__icontains=q)
else:
results = Person.objects.all()
context = dict(results=results, q=q)
return render(request, "results.html", context)
models.py
from django.db import models
from django.db import connection
class Person(models.Model):
name = models.TextField()
job = models.TextField()
website = models.TextField()
def __unicode__(self):
return self.name
urls.py
from django.conf.urls import patterns, include, url
from django.views.generic import ListView, DetailView
from search.models import Person
urlpatterns = patterns('',
url(r'^$', ListView.as_view(
queryset=Person.objects.all(),
template_name="search.html")),
url(r'^(?P<pk>\d+)/$', DetailView.as_view(
model=Person,
template_name="single.html")),
url(r'^results/$', 'search.views.search'),
)
результаты snippet
{% for person in results %}
<li class="list-group-item"><a href="/search/{{person.id}}">{{ person.title }}</a></li>
{% endfor %}
И он работает, однако я обнаружил, что мне нужно изменить текст на подстановочные знаки, поэтому мне нужно будет пройти маршрут SQL. Вот другой код:
views.py
from django.shortcuts import render
from models import Person
import re
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from django.db import connection
def search(request):
q = request.GET.get("q")
moddedq = re.sub(r"(\s\d\s)","%",q)
cursor = connection.cursor()
cursor.execute('''SELECT * FROM search_person WHERE name LIKE %s''', [moddedq])
row = cursor.fetchone()
context = dict(results=results, q=q, moddedq=moddedq, row=row)
return render(request, "results.html", context)
результаты фрагмент
{% for person in row %}
<li class="list-group-item"><a href="/search/{{person.id}}">{{ person.title }}</a></li>
{% endfor %}
Однако это только создает список с каждой частью информации лиц, в то время как исходный код просто отображается имя и при нажатии на имя появилась дополнительная информация. Я заметил, что идентификатор не извлекается из SQL, поэтому гиперссылка, которую я пытаюсь создать, возвращает только на страницу поиска. Мои 2 основные вопросы:
ID не тянет Все данные пользователя, появляющийся в списке
Любая помощь очень ценится.
Благодаря
Я не вижу никаких причин, чтобы использовать сырые SQL здесь; 'Person.objects.filter (name__contains = q)' будет работать абсолютно нормально. –