Let's say I have the following model classes:
# 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')
So, a Target
can have multiple related Issue
s, while an Issue
always relates to one Target
. Now, let's say I add a new table like this:
# Document that describes either a target or an issue
class Document(models.Model):
...
... and I want this both Target
s and Issue
s to have references to Document
s, but a single Document
can only be related to one object, either a Target
or an Issue
. Is this possible to do with Django?
CodePudding user response:
Yes, your definition of Target
and Issue
is fine for what you want. A Target
can have multiple Issue
, where an Issue
can have only relation with a single Target
.
Now you want, Target
and Issue
to refer to Document
.
For this your models.py
will look like this.
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)
...
And then, the rest you have to handle in your views.py
where you have to allow only one value either Target
or Issue
.