Django ManyToManyField with through -- как не потерять данные, не выбранные в QuerySet?

Новичок в Django. У меня есть некоторые проблемы с отношениями ManyToMany и сквозным полем.

Я пытаюсь создать инструмент, в котором сотрудники могут подавать заявки на смены на мероприятиях (бар, входной контроль и т.д.). Поэтому я создал объект Staff (это человек со всеми его ролями и т.д.) и связал его через ManyToManyField с объектом ScheduledShift (который содержит дату события, время и обязанности).

Я хочу иметь возможность представлять каждый день в виде представления для пользователя, где он/она может просто отметить смены, которые он/она доступны в этот день. Это работает, а также записывает правильные данные (т.е. идентификатор сотрудника и идентификатор смены для всех смен, которые он отметил) за этот день в "сквозную" таблицу (объект StaffShift)

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

models.py

class Staff(models.Model):
    ...
    shifts = models.ManyToManyField(ScheduledEventShift, through='StaffShift')

class StaffShift(models.Model):
    staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
    shift = models.ForeignKey(ScheduledEventShift, on_delete=models.CASCADE)

views.py

class StaffShiftUpdateView(ObjectUpdateView):
    model = Staff
    ...
    def get_form(self, form_class=None):
        form = super().get_form(form_class=self.form_class)
        day = datetime(self.kwargs.get('year'), self.kwargs.get('month'), self.kwargs.get('day'))
        form.fields['shifts'].queryset = ScheduledEventShift.objects.filter(
 event__event_date=day).order_by('event__event_date')
        return form

('event' - свойство объекта ScheduledEventShift)

Моя проблема в том, что при записи этих идентификаторов в сквозную таблицу, все другие строки для этого пользователя, которые не были выбраны в QuerySet (т.е. все другие смены, которые он/она уже отметил для других дней), удаляются. Я уверен, что такое поведение задумано разработчиками Django, но для меня желательным было бы, чтобы они просто оставались неизменными в сквозной таблице.

Как я могу этого достичь? Спасибо

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