Управление несколькими модельными отношениями
Я долго ломал голову, пытаясь разобраться с этим, для меня это действительно сложно. Я совсем новичок в 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"
>
Прошу прощения за огромный пост. Как, во имя богов программистов, мне построить такие отношения? Заранее спасибо! Мне удалось отобразить и построить фильтры для событий и категорий, но я совершенно не знаю, как все это связать. (Также я не умею рисовать стрелки)