如何将 table 与多个其他 table 相关联,同时仍然具有一对多关系?

How to relate a table to multiple other tables while still having one-to-many relationship?

假设我有以下模型 类:

# 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 相关。现在,假设我像这样添加一个新的 table:

# Document that describes either a target or an issue
class Document(models.Model):
    ...

... 我希望 Targets 和 Issues 都引用 Documents,但单个 Document 只能与一个对象,TargetIssue。这可能与 Django 相关吗?

是的,您对 TargetIssue 的定义完全符合您的要求。一个 Target 可以有多个 Issue,其中一个 Issue 只能与一个 Target.

有关系

现在你想要 TargetIssue 引用 Document。 为此,您的 models.py 将如下所示。

class Document(models.Model):
    ...
    target = models.ForeignKey(Target, related_name='target_documents', on_delete=models.CASCADE, null=True, blank=True)
    issue = models.ForeignKey(Issue, related_name='issue_documents', on_delete=models.CASCADE, null=True, blank=True)
    ...

然后,您必须在 views.py 中处理其余部分,您必须只允许一个值 TargetIssue