Short visual memo for the three ways to define database relationships in Django.
Many-to-One
class Employee(models.Model):
department = models.ForeignKey(Department, on_delete=models.CASCADE)
- each
Employee
only has oneDepartment
- but a
Department
has multipleEmployee
s
employee.department.pk
department.employee_set.all()
Many-to-Many
class Employee(models.Model):
projects = models.ManyToManyField(Project)
- each
Employee
works on multipleProject
s - each
Project
can be worked on by multipleEmployee
s
employee.projects.all()
projects.employee_set.all()
To query the intermediary table:
employee.projects.through.objects.all()
projects.employee_set.through.objects.all()
One-to-One
class Employee(models.Model):
resume = models.OneToOneField(Resume, on_delete=models.CASCADE)
- each
Employee
only has oneResume
- each
Resume
is owned by only oneEmployee
employee.resume.pk
resume.employee.pk