Каков наилучший способ хранения доступности пользователя как пользовательского объекта в базе данных SQL?

Я разрабатываю веб-приложение, которое будет объединять два разных типа пользователей: Волонтеры и Участники.

У добровольцев будет график "доступности", который по сути представляет собой массив из 48 булевых значений для любого конкретного дня.

Это черновой вариант объекта "DailySchedule", где каждое булево представляет 30-минутный период времени в 24-часовом дне:

class DailySchedule(object):
    availability = []

    def __init__(self):
        for i in range(48):
            self.availability.append(False)
        pass

    def make_available(self, index):
        self.availability[index] = True

    def make_not_available(self, index):
        self.availability[index] = False

    def make_range_available(self, start, end):
        assert 0 <= start <= 47 and 0 <= end <= 47, "Out of Range."
        for i in range(start, end + 1):
            self.availability[i] = True

    def make_range_not_available(self, start, end):
        assert 0 <= start <= 47 and 0 <= end <= 47, "Out of Range."
        for i in range(start, end + 1):
            self.availability[i] = False
<

A WeeklySchedule должно быть множество из 7 таких DailySchedules

Храня значения в пользовательском объекте, я понимаю, что не смогу искать в этих значениях в SQL-запросе, что не является проблемой. Добровольцев совсем немного, поэтому извлечение всех их значений "вторника" с помощью запроса не будет слишком ресурсоемким. Мой главный вопрос заключается в следующем: как нам подключить пользовательские объекты, такие как эти, к модели Volunteer?

Следующий код, очевидно, не будет работать, но он примерно описывает то, чего я надеюсь достичь:

    schedule = models.Field(_('schedule'), blank=True, null=True, default=DailySchedule())

Желательно, чтобы расписание на неделю находилось в отдельной таблице, но тогда мне придется выяснить, как заполнить эту таблицу пользовательскими объектами.

Мне кажется, что существует множество различных способов реализовать это, но многие из них будут неэффективными или плохо продуманными. Управление расписаниями - это то, что очень распространено в организациях и программном обеспечении, поэтому должны быть какие-то хорошие инструменты или информация о том, как сделать это элегантно. Любые соображения или советы будут очень признательны!

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