Я сталкиваюсь с проблемой изо дня в день, но, независимо от того, сколько я продолжаю искать, я не мог найти никакого решения здесь или где-либо в Интернете.Итак, вот оно: я разрабатываю веб-сайт для какого-то учреждения, которое предлагает учебные курсы.Я использую WAGTAIL и структурирую классы следующим образом:
class Course(Page):
...
content_panels = Page.content_panels
class Exam(Page):
#fields
content_panels = Page.content_panels + [
#fields
InlinePanel('preparatory_exam', heading='Preparatory Exams'),
]
class PreparatoryExam(Orderable):
page = ParentalKey('Exam',
on_delete=models.CASCADE,
related_name = 'preparatory_exams',
)
name = models.ForeignKey(
Exam,
on_delete=models.CASCADE,
blank=True,
null=True,
related_name = 'preparatory_exam',
)
Я также структурировал раздел PAGES раздела ADMIN следующим образом:
\COURSE_1_PAGE
\-----------\EXAM_1
\-----------\EXAM_2
\------------------\Prep exam 1
\------------------\Prep exam 2
\-----------\EXAM_3
...
\COURSE_2_PAGE
\-----------\EXAM_1
\-----------\EXAM_2
\-----------\EXAM_3
....
Итак, проблема в том, есть лиспособ передать пользовательский набор запросов в раскрывающемся списке встроенных при выборе подготовительных экзаменов для определенного?Я хочу ограничить набор экзаменами, представленными в том же курсе.Я мог бы сделать это с помощью limit_choices_to, добавленного в поле foreignkey, но AFAIK, это был бы «статический» фильтр, потому что он был бы связан с моделью, а не с ее значениями, поэтому он был бы одинаковым для каждого нового экземпляра экзамена....
Первое, крайне неудовлетворительное решение - это заменить InlinePanel на 2-3 FieldPanels (обычно экзамен не требует более 2-3 других подготовительных экзаменов) ...
Другим УГРОМНЫМ решением было бы явное определение классов Course_1, Course_2 и т. Д., Но проблема здесь в том, что каждый год мне приходилось добавлять новый класс, потому что они каждый год устанавливали новый курс!Таким образом, у меня не остается большого выбора: переопределить каким-либо образом (но я нахожусь в неведении) поведение объекта InlinePanel или изменить способ разработки сайта.Может кто-нибудь мне помочь?Большое спасибо!