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
Employeeonly has oneDepartment - but a
Departmenthas multipleEmployees
employee.department.pk
department.employee_set.all()
Many-to-many
class Employee(models.Model):
projects = models.ManyToManyField(Project)
- each
Employeeworks on multipleProjects - each
Projectcan be worked on by multipleEmployees
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
Employeeonly has oneResume - each
Resumeis owned by only oneEmployee
employee.resume.pk
resume.employee.pk