Django Clé étrangère


Exemple

Le champ ForeignKey est utilisé pour créer une relation many-to-one entre les modèles. Pas comme la plupart des autres champs nécessite des arguments de position. L'exemple suivant illustre la relation entre la voiture et le propriétaire:

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)

Le premier argument du champ est la classe à laquelle le modèle est lié. Le deuxième argument positionnel est l'argument on_delete . Dans les versions actuelles, cet argument n'est pas requis, mais il sera requis dans Django 2.0. La fonctionnalité par défaut de l'argument est affichée comme suit:

class Car(model.Model)
    owner = models.ForeignKey('Person', on_delete=models.CASCADE)
    ...

Cela entraînera la suppression des objets Car du modèle lorsque son propriétaire a supprimé du modèle Personne. C'est la fonctionnalité par défaut.

class Car(model.Model)
    owner = models.ForeignKey('Person', on_delete=models.PROTECT)
    ...

Cela empêchera la suppression des objets Personne s'ils sont liés à au moins un objet Car. Tous les objets Car qui font référence à un objet Personne doivent être supprimés en premier. Et puis l'objet Personne peut être supprimé.