Как разработать модель для приложения Django TaskManager?
Мне нужно небольшое приложение для управления задачами, которое выполняет определенные задачи, например, копирование файла, отправка электронной почты, создание pdf и так далее. Задачи также должны выполняться в порядке/приоритете, например, первая: создать pdf, вторая: отправить почту. Сейчас я размышляю над тем, какой должна быть хорошая модель для этого. Кое-где мне не очень нравятся идеи, которые у меня есть. Среди прочего, у меня есть такие вопросы, как:
- Как может выглядеть модель?
- Нужно ли использовать абстрактный класс?
- Как насчет наследования? Должен ли я использовать здесь значения NULL и лучше использовать большую таблицу, а не разбивать ее на отдельные таблицы?
Пример для "models.py":
class Channel(models.Model):
name = models.CharField(max_length=50, unique=True, null=False)
active = models.BooleanField(default=False)
@admin.display(boolean=True)
def is_active(self):
return self.active
def __str__(self):
return self.name
class Meta:
db_table = 'channel'
verbose_name = 'Channel'
verbose_name_plural = 'Channel'
class Task(models.Model):
name = models.CharField(max_length=50, unique=True, null=False)
active = models.BooleanField(default=False)
priority = models.IntegerField(null=False)
channel = models.ForeignKey(Channel, on_delete=models.CASCADE, related_name='%(class)s_channel')
@admin.display(boolean=True)
def is_active(self):
return self.active
class Meta:
abstract = True
class CopyFile(Task):
path_src = models.CharField(max_length=200, null=False)
path_dest = models.CharField(max_length=200, null=False)
pattern = models.CharField(max_length=200, null=False)
def __str__(self):
return self.name
class Meta:
db_table = 'task_copy_file'
verbose_name = 'Task (CopyFile)'
verbose_name_plural = 'Task (CopyFile)'
class SendMail(Task):
recipient = models.CharField(max_length=200, null=False)
sender = models.CharField(max_length=200, null=False)
content = models.CharField(max_length=200, null=False)
def __str__(self):
return self.name
class Meta:
db_table = 'task_send_mail'
verbose_name = 'Task (SendMail)'
verbose_name_plural = 'Task (SendMail)'
class CreatePDF(Task):
path_src = models.CharField(max_length=200, null=False)
path_dest = models.CharField(max_length=200, null=False)
pattern = models.CharField(max_length=200, null=False)
def __str__(self):
return self.name
class Meta:
db_table = 'task_create_pdf'
verbose_name = 'Task (CreatePDF)'
verbose_name_plural = 'Task (CreatePDF)'