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
? Или это не тот инструмент для работы?