Как связать таблицу с несколькими другими таблицами, сохраняя при этом отношения "один-ко-многим"?
Допустим, у меня есть следующие классы моделей:
# Inspection target
class Target(models.Model):
...
# Issue found during the inspection
class Issue(models.Model):
target = models.ForeignKey(Target, on_delete=models.CASCADE, related_name='issues')
Итак, Target может иметь несколько связанных Issue, в то время как Issue всегда связан с одним Target. Теперь, допустим, я добавлю новую таблицу следующим образом:
# Document that describes either a target or an issue
class Document(models.Model):
...
... и я хочу, чтобы оба Target и Issue имели ссылки на Document, но один Document может быть связан только с одним объектом, либо Target, либо Issue. Возможно ли это сделать с помощью Django?
Да, ваше определение Target и Issue подходит для того, что вы хотите. Target может иметь несколько Issue, в то время как Issue может иметь связь только с одним Target.
Теперь вы хотите, чтобы Target и Issue ссылались на Document.
Для этого ваша models.py будет выглядеть следующим образом.
class Document(models.Model):
...
target = models.ForeignKey(Target, on_delete=models.CASCADE, null=True, blank=True)
issue = models.ForeignKey(Issue, on_delete=models.CASCADE, null=True, blank=True)
...
А затем, остальное вы должны обработать в вашем views.py, где вы должны разрешить только одно значение либо Target, либо Issue.