Редактирование вида поиска в Django - PullRequest
0 голосов
/ 25 октября 2010

Здравствуйте, я работаю в Django, как использовать форму поиска с сайта документов Django. Вот некоторая информация ниже. Теперь, как я могу произвести поиск детали по названию? Например, если я хотел найти книгу под названием «Apress», но вместо того, чтобы набирать слово целиком, я просто написал «ap», чтобы получить Apress. Есть ли способ, как достичь этого решения?

    from django.db.models import Q
    from django.shortcuts import render_to_response
    from models import Book

    #views.py
    def search(request):
        query = request.GET.get('q', '')
        if query:
            qset = (
                Q(title__icontains=query) |
                Q(authors__first_name__icontains=query) |
                Q(authors__last_name__icontains=query)
            )
            results = Book.objects.filter(qset).distinct()
        else:
            results = []
        return render_to_response("books/search.html", {
            "results": results,
            "query": query
        })

    #search html

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html lang="en">
    <head>
        <title>Search{% if query %} Results{% endif %}</title>
    </head>
    <body>
      <h1>Search</h1>
      <form action="." method="GET">
        <label for="q">Search: </label>
        <input type="text" name="q" value="{{ query|escape }}">
        <input type="submit" value="Search">
      </form>

      {% if query %}
        <h2>Results for "{{ query|escape }}":</h2>

        {% if results %}
          <ul>
          {% for book in results %}
            <li>{{ book|escape }}</l1>
          {% endfor %}
          </ul>
        {% else %}
          <p>No books found</p>
        {% endif %}
      {% endif %}
    </body>
    </html>

1 Ответ

1 голос
/ 25 октября 2010

Если вы хотите найти соответствие в начале поля, вы можете использовать startswith или istartswith, если хотите, чтобы оно было чувствительным к регистру. icontains, который вы используете сейчас, разрешит совпадения даже внутри строк, т.е. «Арри» будет соответствовать «Гарри». В то время как startswith позволит 'Har' соответствовать 'Harry', но не 'ArHarHar'

...