Тренажёр работал только по одной теме, а повторять хочется и «по всем сразу». Решил дать выбор: отметить несколько тем. Пока разбирался с чекбоксами в форме и сбором выбранных id — понял деталь про то, что в POST приходят только отмеченные. Маленькая, но показательная логика.
Нейтрально: чекбоксы в HTML при выборе отправляют свои значения; сервер фильтрует по переданным id.
selected = request.POST.getlist("topics") # ["3","5"] отмеченные
# в GET-пути: /flashcards/?topics=3&topics=5
if selected:
cards = Card.objects.filter(topic_id__in=selected)
Радость от «гибкого выбора» — тренажёр становится таким, как мне удобно, а не как «придумано». Каждая такая мелочь — кирпич в уверенность: я проектирую UX, а не только пишу эндпоинты.