Inline_Formset для конкретного набора запросов вместо всех моделей?

В настоящее время я работаю над проектом и пытаюсь найти лучший способ легко вывести список форм.

Я посмотрел несколько видео на YouTube о inline_formsets (а также прочитал документацию), и мне кажется, что это был бы "путь", но я не совсем уверен, как их реализовать (и возможно ли это вообще для меня), учитывая мою структуру модели.

Пояснение проекта: У меня есть несколько моделей: Summative, Rubric, Domain, Subdomain, SummativeScore и ProficiencyLevel

Модели выглядят следующим образом:

class Domain(CreateUpdateMixin):
    """
    Model definition for Domain.
    """

    name = models.CharField(max_length=50)
    description = models.CharField(max_length=250)

class Rubric(CreateUpdateMixin):
    """
    Model definition for Rubric.
    """

    short_description = models.CharField(max_length=100)
    long_description = models.CharField(max_length=250)
    growthplan_count = models.IntegerField()
    report_url = models.CharField(max_length=350)
    domains = models.ManyToManyField(Domain)
    active = models.BooleanField(default=False)

class Summative(CreateUpdateMixin, CreateUpdateUserMixin):
    """
    Model definition for Summative.
    """

    end_year = models.ForeignKey(Year, on_delete=models.PROTECT)
    rubric = models.ForeignKey(Rubric, on_delete=models.PROTECT)
    locked = models.BooleanField(default=False)
    employee = models.ForeignKey(
        User, on_delete=models.PROTECT, related_name="%(class)s_employee"
    )
    admin_locked_on = models.DateTimeField(
        auto_now=False, auto_now_add=False, blank=True, null=True
    )
    report_url = models.CharField(max_length=350, blank=True)

class Subdomain(CreateUpdateMixin):
    """
    Model definition for Subdomain.
    """

    domain = models.ForeignKey(Domain, on_delete=models.PROTECT)
    short_description = models.CharField(max_length=100)
    long_description = models.CharField(max_length=250)
    character_code = models.CharField(max_length=5)
    proficiency_levels = models.ManyToManyField(ProficiencyLevel)

class ProficiencyLevel(CreateUpdateMixin):
    """
    Model definition for SubdomainProficienyLevel.
    """

    name = models.CharField(max_length=75)
    description = models.CharField(max_length=250)

class SummativeScore(CreateUpdateMixin, CreateUpdateUserMixin):
    """
    Model definition for SummativeScore.
    """

    summative = models.ForeignKey(Summative, on_delete=models.PROTECT)
    subdomain = models.ForeignKey(Subdomain, on_delete=models.PROTECT)
    proficiency_level = models.ForeignKey(
        ProficiencyLevel, on_delete=models.PROTECT
    )

Шаг 1: получить список доменов просто summative.rubric.domains.all()

Шаг 2: мы можем просмотреть список доменов, который мы получили выше, чтобы получить список поддоменов для данного суммарного показателя

A Subdomain имеет отношение многие-ко-многим к ProficiencyLevel

Модель SummativeScore имеет FK для Summative и Subdomain (которые будут скрытыми входами) с третьим полем, являющимся "рангом", выбранным пользователем (FK для ProficiencyLevel) Эта модель должна отражать выбор пользователем рейтинга субдоменов для этого Summative.

Шаг 3: Пользователь выбирает ProficiencyLevel из списка тех, которые привязаны к Subdomain

Я пытаюсь понять, как лучше всего сделать страницу, которая показывает SummativeScoreForm для каждого Subdomain, связанного с конкретным Summative - я думаю, учитывая ограничения запросов, требуемых выше, чтобы найти нужные Subdomain, связанные с Summative, инлайн_формсет, вероятно, не подойдет - но я не уверен.

В конечном итоге я хотел бы составить шаблон таким образом, чтобы он выглядел следующим образом:

h2.Domain1
-- SummativeScoreForm related to Subdomain1
-- SummativeScoreForm related to Subdomain2
h2.Domain2 
-- SummativeScoreForm related to Subdomain3
-- SummativeScoreForm related to Subdomain4
h2.Domain3
-- SummativeScoreForm related to Subdomain5
-- SummativeScoreForm related to Subdomain6

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

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

Мой текущий набор inline_formset выглядит следующим образом:

SummativeScoreFormset = inlineformset_factory(
    Summative,
    SummativeScore,
    fields=("proficiency_level",),
)

Он отображается должным образом, предоставляя мне выпадающий список уровней квалификации. Но я хотел бы иметь по одному для каждого субдомена, привязанного к сумме, которую я просматриваю.

Главный вопрос: есть ли способ сделать это с помощью inline_formset? Или это не тот инструмент для работы?

Вернуться на верх