Apakah perbezaan utama antara `OneToOneField()` dan `ForeignKey()` dengan `unique=True` dalam Django?

DDD
Lepaskan: 2024-11-12 13:01:01
asal
510 orang telah melayarinya

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

OneToOneField() vs ForeignKey() dalam Django

OneToOneField() dan ForeignKey() ialah dua medan model Django yang digunakan untuk mewujudkan hubungan antara model. Walaupun kedua-dua medan boleh mencipta hubungan satu dengan satu, terdapat perbezaan yang ketara dalam tingkah laku mereka:

OneToOneField()

  • Persamaan Konseptual: Serupa dengan ForeignKey dengan unique=True.
  • Hubungan "Terbalik": Secara langsung mengembalikan satu objek di sisi lain perhubungan.

ForeignKey() dengan unik =True

  • Perbezaan Konseptual: Menentukan perhubungan satu dengan satu dengan menetapkan unique=True.
  • Hubungan "Terbalik" : Mengembalikan QuerySet di bahagian lain perhubungan.

Contoh

Pertimbangkan model berikut:

# 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)
Salin selepas log masuk

Dalam cangkerang 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>]
Salin selepas log masuk

Hubungan "terbalik" OneToOneField (engine.car) mengembalikan objek tunggal (contoh Kereta), manakala ForeignKey dengan hubungan "terbalik" unik=True (engine2.car2_set.all()) mengembalikan Set Query (senarai semua kejadian Car2 yang berkaitan dengan contoh Enjin2 itu).

Atas ialah kandungan terperinci Apakah perbezaan utama antara `OneToOneField()` dan `ForeignKey()` dengan `unique=True` dalam Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan