Управление несколькими модельными отношениями

Я долго ломал голову, пытаясь разобраться с этим, для меня это действительно сложно. Я совсем новичок в Django и в настоящее время изучаю, как управлять отношениями моделей. Я сделал следующее: Построил отношения между моделями на основе этого:

А Пользователь может иметь Звание должности (Директор, Аналитик и т.д.), и это название должности связано с штатом пользователя и сектором (кто отвечает за события X)

.

Я сделал следующее:

Название должности Класс:

>
> class JobTitle(models.Model):
>     JOB_TITLES = [
>         ('0', 'Director'),
>         ('1', 'Manager'),
>         ('2', 'Coordinator'),
>         ('3', 'Supervisor'),
>         ('4', 'Analyst'),
>     ]
>     jobtitle = models.CharField(max_length=35, choices=JOB_TITLES)
>     user = models.ForeignKey(User, on_delete=models.CASCADE, >null=False, blank=False)
>     state = models.ForeignKey(States, on_delete=models.SET_NULL, >null=True)
>
>     sector = models.ForeignKey(Sector, on_delete=models.SET_NULL, >null=True)
> 
>     class Meta:
>         verbose_name = "Job Title"
>         verbose_name_plural = "Job Titles"
> 
>     def __str__(self):
>         return self.jobtitle

Это класс состояния:

> class States(models.Model):
>     states = models.CharField(max_length=100)
> 
>     def __str__(self) -> str:
>         return self.states
> 
>     class Meta:
>         verbose_name_plural = "States"

И класс сектора:

> class Sector(models.Model):
>
>     sector = models.CharField(max_length=100)
>     events = models.ManyToManyField(Event)
> 
>     class Meta:
>         verbose_name = "Sector"
> 
>     def __str__(self) -> str:
>         return self.sector

Ну, Секторы имеют множество Событий, связанных с ними, а эти События имеют множество Категорий, связанных с ними

Класс событий:

> 
> class Event(models.Model):
>
>     events = models.CharField(max_length=100)
>     category = models.ManyToManyField(Category)
> 
>     def __str__(self):
>         return self.events
>     class Meta:
>         verbose_name = "Event"
>         verbose_name_plural = "Events"

Категории Класс:

> class Category(models.Model):
>
>     categories = models.CharField(max_length=100)
> 
>     def __str__(self) -> str:
>         return self.categories
> 
>     class Meta:
>         verbose_name = "Category"
>         verbose_name_plural = "Categories"

Дело в том, что я пытаюсь построить систему сигнализации, где пользователь должен зарегистрировать "триггер", выбрав Event, Category и State, и применить логику, где я могу указать на пользователя с правильным названием должности , который отвечает за события этого состояния в зависимости от времени. Порядок срабатывания выглядит следующим образом: Если событие не решено за 1 час, оно переходит на следующий уровень триггеров.

Пример: Пользователь выбирает, в каком порядке он хочет быть оповещен (T0, T1 и т.д.) и по каким событиям (с их соответствующими категориями)

Кинда происходит следующим образом:

Логика времени:

def diff_date_time(self):
    data_event = timezone.localtime(self.data)
    data_current = timezone.localtime(timezone.now())
    diff_hour = (data_current.timestamp() - data_event.timestamp())/3600

    if diff_hour < 1:
        #Get the user who is related to T0
        return data
    elif diff_hour < 2:
        #Get the user who is related to T1
        return data
    elif diff_hour < 3:
        #Get the user who is related to T2
        return data
    elif diff_hour < 4:
        #Get the user who is related to T3
        return data
    elif diff_hour < 5:
        #Get the user who is related to T4
        return data
    elif diff_hour >= 6:
        #Get the user who is related to T5
        return data

Приказ о триггере:

> class Trigger(models.Model):
>     TRIGGER_ORDER = [
>         ('0', 'T0'),
>         ('1', 'T1'),
>         ('2', 'T2'),
>         ('3', 'T3'),
>         ('4', 'T4'),
>         ('5', 'T5'),
>         ('6', 'T6'),
>     ]
>     user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
>     events = models.ForeignKey(Event, on_delete=models.SET_NULL, null=True)
>     order = models.CharField(max_length=7, choices=TRIGGER_ORDER)
> 

Модель регистра триггера:

> class RegisterTrigger(models.Model):
>
>     eventtype = models.ForeignKey('Event', on_delete=models.CASCADE, verbose_name="Event:")
>     categorytype = models.ForeignKey('Category', on_delete=models.CASCADE, verbose_name="Category:")
>     statetype = models.ForeignKey('States', on_delete=models.CASCADE, verbose_name="State:")
>     created_date = models.DateTimeField(auto_now_add=True, verbose_name="Created in")
> 
>     class Meta:
>         verbose_name = "Register Trigger"
>

Прошу прощения за огромный пост. Как, во имя богов программистов, мне построить такие отношения? Заранее спасибо! Мне удалось отобразить и построить фильтры для событий и категорий, но я совершенно не знаю, как все это связать. (Также я не умею рисовать стрелки)

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