ich habe eine ziemlich einfach gehaltene Bücher-App erstellt. In dieser möchte ich nun über eine Suche ein Genre mittels Select-Field auswählen. Dies konnte ich auch mit Hilfe recht gut realisieren.
Wenn ich also bspw. das Genre "Thriller" auswähle, bekomme ich auch das entsprechende queryset korrekt angezeigt. Allerdings bleibt im Select-Field nicht das vorher ausgewählte Genre markiert, sondern es wird auf den ersten Eintrag zurückgesetzt.
Kann mir jemand helfen, wie ich dieses Problem lösen kann bzw. erläutern, warum dies genau passiert?
Danke schon jetzt für eine Anwort.
luvlinux
Code: Alles auswählen
views.py
def genre_filter(request):
if request.method == 'GET':
genres = Genre.objects.all()
context = {'genres': genres}
return render(request, 'books/genre_select.html', context)
else:
genres = Genre.objects.all()
genre = request.POST.get('selector')
books = Book.objects.filter(genre=genre)
context = {
'genres': genres,
'books': books,
}
return render(request, 'books/genre_select.html', context)
Code: Alles auswählen
genre_select.html
{% block content %}
<h4>Filtering a Genre</h4>
<form action="" method="POST">
{% csrf_token %}
<select name="selector">
{% for genre in genres %}
<option value="{{genre.id}}">{{genre.name}}</option>
{% endfor %}
</select>
<button type="submit">Filter</button>
</form>
<h4>Output...</h4>
{{ books }}
{% endblock %}
Code: Alles auswählen
urls.py
urlpatterns = [
…,
path('genre_filter/', views.genre_filter, name='genre_filter'),
]
Code: Alles auswählen
models.py
...
class Genre(models.Model):
name = models.CharField(max_length=25)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=128)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
genre = models.ForeignKey(Genre, on_delete=models.CASCADE)
isbn = models.CharField(max_length=10)
price = models.DecimalField(max_digits=7, decimal_places=2)
date_published = models.DateField()
...