Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyCode Conference :: https://pycode-conference.org/
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Django wyszukiwanie i filtrowanie wyników  (Przeczytany 664 razy)
« : 18:35 11/03/18 »
Mirasol Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 4


Witam, chciałem zrobić w swoim projekcie wyszukiwanie wyników z możliwością filtrowania ich w zależności od tego co wpisze w danym polu. Mam tu prosty widok w którym wyszukuje mi tylko dane wpisane w jednym polu.
Może lepiej pokaże przykładowe wycinki kodu:

#models.py

class Author(models.Model):
   first_name = models.CharField(verbose_name = _("first name"), max_length=20)
   last_name = models.CharField(max_length=50)

   def __str__(self):
      return "{first_name} {last_name}".format(first_name=self.first_name, last_name=self.last_name)

#views.py

def search_view(request):
    error = False
    if 'q' in request.GET:
        q = request.GET['q']
        if not q:
            error = True
        else:
            result = Author.objects.filter(first_name__icontains=q)
            return render(request, 'shelf/search_form.html', {'result': result, 'query': q})
    return render(request, 'shelf/search_form.html', {'error': error})


#search_form.html

<body>
    {% if error %}
        <p style="color: red;">Please submit a search term.</p>
    {% endif %}
    <form action=" " method="get">
        <p><label for="q">Imię:</label>
            <input type="text" name="q" id="id_first_name"></p>
        <input type="submit" value="Search">
    </form>
       <p>You searched for: <strong>{{ query }}</strong></p>

        {% if results %}
            <p>Found {{ results|length }} author{{ results|pluralize }}.</p>
            <ul>
                {% for author in results %}
                <li>Imie:{{ author.first_name }}</li>
                <li>Nazwisko:{{ author.last_name }}</li>

                {% endfor %}
            </ul>
        {% else %}
            <p>No Authors matched your search criteria.</p>
        {% endif %}

</body>
I teraz chciałem dodać pole w formularzu "last_name" czyli nazwisko i tak przerobić  tak search_view aby można było wyszukiwać dane raz z pola first_name a raz z pola last_name a wynik wyszukiwania zwracał by imię i nazwisko , jeżeli  takie było by w bazie.
Proszę o pomoc.
Zapisane
« Odpowiedz #1 : 11:22 12/03/18 »
raydeal Offline
Professional Python User

Zobacz profil
***

Reputacja: 73
Wiadomości: 438


Sprawdzaj które pola zostały wypełnione i na tej podstawie twórz odpowiednie filtry. Można by próbować stworzyć filtr bez sprawdzania warunków w pythonie ale nie polecam tego sposobu bo kod jest mniej czytelny a wydajność zapytania do bazy gorsza.
Zapisane
« Odpowiedz #2 : 13:43 12/03/18 »
Mirasol Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 4


zastosowałem django-filter
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot