В вашем случае, поскольку вы говорите: «Процесс (компании) состоит из одного или нескольких этапов (компании)», похоже, у вас должна быть такая структура:
Company <----* Process <----* Phase
Компания имеет свои процессы, процесс имеет свои фазы. На самом деле это не ManyToMany
отношение, это OneToMany
(процесс имеет много фаз, но каждая фаза связана с одним процессом).
Если это так, вы должны иметь
class Phase(models.Model):
process = models.ForeignKey(Process, null=True) # based on your comment, if a Phase does not belong to a Process, leave it null.
phase = models.ForeignKey(Phase)
order = models.PositiveIntegerField(help_text="At what step of your process will this phase occur?")
class Meta:
unique_togather = ("process", "order")
Я думаю, что unique_together
в классе Meta
- это то, что вы хотите. Он обеспечивает как на уровне администратора, так и на уровне базы данных уникальность этих двух полей вместе.
редактирование:
(ForeignKey
поле может быть пустым - см. this )
на основании вашего комментария:
Не используйте ManyToMany
, так как он автоматически генерирует «таблицу посередине», в то время как она вам нужна для ваших нужд. Вместо этого попробуйте определить другую модель (вместе с вашими Company
, Phase
и Process
):
class PhaseOrder(models.Model):
process = models.ForeignKey(Process)
phase = models.ForeignKey(Phase)
order = models.PositiveIntegerField(help_text="At what step of your process will this phase occur?")
class Meta:
unique_together = (("process", "order"), ("process", "phase"))