Как сделать двойной каскадный фильтр в view.py Django?

Ребят, всем привет.

Задача: Общая модель статьи - к ней цепляется через ForeignKey 3 вопроса - к каждому вопросу через ForeignKey цепляется 3 варианта ответов.

download?id=Tv5QnVlxCMAPY1LnWiuEQKiIzXB0

Моя реализация:

1) Я через url паттерн передаю question1_id

url(r'^question(?P<question1_id>[0-9]+)$', 'bakot.views.question', name='question')


2) Пишу вьюшку, в которой хочу сделать логику:

- загружается статья,
- через фильтр выбираю вопросы, которые относятся к этой статье.
- через фильтр выбираю ответы, которые относятся к каждому конкретному вопросу.

def question(request, question1_id):
    stepfields = get_object_or_404(Step, id = question1_id)
    questionship = Question.objects.filter(step_id = question1_id)
    answership = Answer.objects.filter(question_id = question1_id)
    context = {
        "stepfields" : stepfields,
        "questionship" : questionship,
        "answership" : answership,
    }
    return render(request, 'bakot/question.html', context)


Проблема: Статья отображается, вопросы отображаются, ответы отображаются (но это все ответы принадлежат одному вопросу, т.е. они повторяются в трех вопросах).

т.е. получается, что фильтр идет по question_id = 1

Модель базы данных ответов для одного вопроса (выводятся на странице только ответы с question_id = 1 )

download?id=PLEUvuOHxUD8o4MwsKBBJrLs14Nb

Что пробовал:

В базе данных вопроса, есть параметр: id.

download?id=41txoPzHinSmH116yVjZsLDKhHeV

Я думаю так, сначала мы отсеиваем все вопросы, которые принадлежат данной статье, а потом передаем их id в фильтр вывода вопросов.

download?id=MvmyrvryjRAd4TybjAxDPsbfFLGI

По типу:

def question(request, question1_id):
    stepfields = get_object_or_404(Step, id = question1_id)
    questionship = Question.objects.filter(step_id = question1_id)
    answership = Answer.objects.filter(question_id = questionship.id) # 1 попытка
    answership = Answer.objects.filter(question_id = questionship(request(id))) #2 попытка    
    context = {
        "stepfields" : stepfields,
        "questionship" : questionship,
        "answership" : answership,
    }
    return render(request, 'bakot/question.html', context)


В итоге, это не работает.

Можно конечно, просто ручками задать там id, но это я считаю - не есть хорошо.
  • Вопрос задан
  • 412 просмотров
Пригласить эксперта
Ответы на вопрос 1
@pacahon
Не понял, зачем step, когда на картинке у вас для статьи сразу все вопросы отображаются?
Вопросы и связанные с ними ответы вытаскивайте так Question.objects.filter(article=).prefetch_related("answerset"). Объявление моделей вы не указали, поэтому наугад написал, если answerset нет, в дев-окружении джанга сама ругнётся, 1.8 точно ругается
Ответы дёргаете querstion.answer.all()
https://docs.djangoproject.com/es/1.9/ref/models/q...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы