Как связать таблицу с несколькими другими таблицами, сохраняя при этом отношения "один-ко-многим"?

Допустим, у меня есть следующие классы моделей:

# 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.

Вернуться на верх