Последовательное добавление, удаление и редактирование формы поля "многие ко многим

Уже существует довольно много вопросов (1, 2, 3 и т.д.) об этом, но без (хороших) ответов.

Рабочий код

У меня есть одна модель для сотрудника и другая для рабочих часов. Я хочу связать их отношениями "многие-ко-многим". Для этого я хочу создать форму для их добавления, удаления и редактирования. Пока что я могу только выбрать их из списка всех отношений.

models.py

class WeekdayHour(models.Model):
    """Model representing a business hours in for specific weekdays."""

    WEEKDAYS = [
        (1, _("Monday")),
        (2, _("Tuesday")),
        (3, _("Wednesday")),
        (4, _("Thursday")),
        (5, _("Friday")),
        (6, _("Saturday")),
        (7, _("Sunday")),
    ]

    weekday = models.IntegerField(choices=WEEKDAYS)
    from_hour = models.TimeField()
    to_hour = models.TimeField()

class Employee(models.Model):
    """Model representing a user employee."""
    
    name = models.CharField(max_length=50)
    business_hours = models.ManyToManyField('WeekdayHour', through='WeekdayHourEmployee')

class WeekdayHourEmployee(models.Model):
    weekday_hour = models.ForeignKey('WeekdayHour', on_delete=models.RESTRICT)
    employee = models.ForeignKey('Employee', on_delete=models.RESTRICT)

    class Meta:
        unique_together = ('weekday_hour', 'employee')

Причиной использования промежуточной таблицы является определение уникального ограничения together.

Далее я определяю форму следующим образом.

forms.py

class EmployeeForm(ModelForm):
    # define the specific widget for the business hours
    business_hours = forms.ModelMultipleChoiceField(
        queryset=WeekdayHour.objects.all(),
        widget=forms.CheckboxSelectMultiple
    )

    class Meta:
        model = Employee
        fields = ('name', 'business_hours')

На данный момент у меня есть форма, отображающая рабочие часы, которая выглядит следующим образом: enter image description here

(я опускаю код макета для краткости, но он основан на этом посте)

Экспериментальный код

Это только половина того, что я хочу. В идеале, это должно выглядеть следующим образом: enter image description here

Я пытался сделать это с помощью встроенных наборов форм, но не смог найти хорошего способа сделать это с полями "многие ко многим". Почему-то всегда возникает ошибка на таблице в середине. Следующий код - это самое удачное, чего я добился.

forms.py

class WeekdayHourForm(ModelForm):
    class Meta:
        model = WeekdayHour
        fields = ('weekday', 'from_hour', 'to_hour')


EmployeeBusinessHourFormset = forms.inlineformset_factory(Employee, WeekdayHour, WeekdayHourForm)

views.py

class EmployeeUpdateView(UpdateView):
    model = Employee
    form_class = EmployeeBusinessHourFormset

В зависимости от того, что я беру в inlineformset, я получаю одну из следующих ошибок: Unknown field(s) (to_hour, weekday, from_hour) specified for WeekdayHourEmployee или ValueError: 'automate.WeekdayHour' has no ForeignKey to 'automate.Employee'.

Похоже, что двойная ссылка мешает работе набора форм.

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