Я новичок как в Django, так и в MySQL, поэтому я прошу прощения, если это окажется простым вопросом.
Я работаю над сайтом управления проектами.Скажем, у нас есть Program
.Каждая программа имеет определенное число Milestones
, которое, в свою очередь, имеет определенное количество Tasks
, которое необходимо заполнить, чтобы достичь этапа.Вехи будут одинаковыми в разных программах, но нет никакой гарантии, что задачи, необходимые для каждого этапа, останутся одинаковыми в разных программах.
Вот (сокращенно) models.py
:
class Program(models.Model):
# ...
complete = models.BooleanField()
milestones = models.ManyToManyField(Milestone, through='ProgramMilestone')
class Milestone(models.Model):
# ...
class Task(models.Model):
# ...
complete = models.BooleanField()
milestone = models.ForeignKey(Milestone)
class ProgramMilestone(models.Model):
# ...
complete = models.BooleanField()
program = models.ForeignKey(Program)
milestone = models.ForeignKey(Milestone)
У меня есть ...through='ProgramMilestone'
, потому что Programs
должно быть разрешено предоставить общий доступ Milestones
, но он имеет статус завершения для каждой программы.
Проблема с этой схемой примерно такая:
- У нас есть две программы: Программа 1 и Программа 2.
- Программа 1 имеет этап A, а программа 2 также имеет этап A.
- Добавление задачи в этап A программы 1..
- Нежелательное последствие: задача теперь также прикреплена к Milestone A. программы 2.
Решением может быть создание двух «Milestone A» в базе данных Milestone: два разныхстроки с общим названием "Milestone A."Однако, учитывая, что они будут различаться только по id
, будучи одним и тем же концептуальным элементом, это кажется пустой тратой.
Другая идея может заключаться в том, чтобы при добавлении нового и ProgramID
, и MilestoneID
Task
, но тогда я не уверен, что кто-то может добавить новые задачи в Django Admin - то есть, как передать ProgramID
Программы, на которую в данный момент смотрит пользователь.
Как можетЯ настроил models.py
так, чтобы Программы могли совместно использовать этапы, имея набор задач для каждой программы для каждого этапа (т. Е. Избегая описанного выше сценария)?