Maison > développement back-end > Tutoriel Python > Quelle est la principale différence entre `OneToOneField()` et `ForeignKey()` avec `unique=True` dans Django ?

Quelle est la principale différence entre `OneToOneField()` et `ForeignKey()` avec `unique=True` dans Django ?

DDD
Libérer: 2024-11-12 13:01:01
original
525 Les gens l'ont consulté

What is the key difference between `OneToOneField()` and `ForeignKey()` with `unique=True` in Django?

OneToOneField() vs ForeignKey() dans Django

OneToOneField() et ForeignKey() sont deux champs de modèle Django utilisés pour établir des relations entre les modèles. Bien que les deux champs puissent créer une relation individuelle, il existe des différences subtiles dans leur comportement :

OneToOneField()

  • Similitude conceptuelle : similaire à ForeignKey avec unique=True.
  • Relation "Reverse" : renvoie directement un seul objet sur l'autre côté de la relation.

ForeignKey() avec unique=True

  • Différence conceptuelle : Spécifie une relation un-à-un par paramètre unique=True.
  • Relation "Inverse" : renvoie un QuerySet sur le l'autre côté de la relation.

Exemple

Considérons les modèles suivants :

# OneToOneField example
class Car(models.Model):
    name = models.CharField(max_length=25)
    engine = models.OneToOneField(Engine)

# ForeignKey with unique=True example
class Car2(models.Model):
    name = models.CharField(max_length=25)
    engine = models.ForeignKey(Engine2, unique=True)
Copier après la connexion

Dans le shell Python :

# OneToOneField
car = Car.objects.get(name='Audi')
engine = Engine.objects.get(name='Diesel')
print(engine.car)  # Outputs <Car: Audi>

# ForeignKey with unique=True
car2 = Car2.objects.get(name='Mazda')
engine2 = Engine2.objects.get(name='Wankel')
print(engine2.car2_set.all())  # Outputs [<Car2: Mazda>]
Copier après la connexion

La relation "inverse" de OneToOneField (engine.car) renvoie un seul objet (l'instance Car), tandis que ForeignKey avec unique=La relation "inverse" de True (engine2.car2_set.all()) renvoie un QuerySet (une liste de toutes les instances Car2 liées à cette instance Engine2).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal