ForeignKey field is used to create a
many-to-one relationship between models.
Not like the most of other fields requires positional arguments.
The following example demonstrates the car and owner relation:
from django.db import models class Person(models.Model): GENDER_FEMALE = 'F' GENDER_MALE = 'M' GENDER_CHOICES = ( (GENDER_FEMALE, 'Female'), (GENDER_MALE, 'Male'), ) first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) gender = models.CharField(max_length=1, choices=GENDER_CHOICES) age = models.SmallIntegerField() class Car(model.Model) owner = models.ForeignKey('Person') plate = models.CharField(max_length=15) brand = models.CharField(max_length=50) model = models.CharField(max_length=50) color = models.CharField(max_length=50)
The first argument of the field is the class to which the model is related.
The second positional argument is
In the current versions this argument is not required, but it will be required in Django 2.0.
The default functionality of the argument is shown as following:
class Car(model.Model) owner = models.ForeignKey('Person', on_delete=models.CASCADE) ...
This will cause Car objects to be deleted from the model when its owner deleted from Person model. This is the default functionality.
class Car(model.Model) owner = models.ForeignKey('Person', on_delete=models.PROTECT) ...
This will prevents Person objects to be deleted if they are related to at least one Car object. All of the Car objects which reference a Person object should be deleted first. And then the Person Object can be deleted.