Apakah perbezaan antara OneToOneField() dan ForeignKey() dalam Django, dan bagaimanakah perhubungan terbalik mereka berkelakuan?

Patricia Arquette
Lepaskan: 2024-11-07 00:34:02
asal
498 orang telah melayarinya

What is the difference between OneToOneField() and ForeignKey() in Django, and how do their reverse relationships behave?

OneToOneField() vs ForeignKey() dalam Django: Memahami Perbezaan

Django menawarkan dua jenis medan hubungan, OneToOneField() dan ForeignKey( ), untuk mewujudkan hubungan antara model. Memahami perbezaan utama antara kedua-dua jenis medan ini adalah penting untuk reka bentuk model yang optimum.

OneToOneField():

OneToOneField() mentakrifkan hubungan satu dengan satu antara dua model, membayangkan bahawa contoh satu model hanya boleh dikaitkan dengan satu contoh yang lain. Sama seperti ForeignKey() dengan unique=True, OneToOneField() memastikan keunikan perhubungan. Walau bagaimanapun, bahagian "terbalik" perhubungan OneToOneField() secara langsung mengembalikan satu objek berkaitan daripada model lain.

ForeignKey():

ForeignKey() menetapkan perhubungan banyak-dengan-satu antara model, membenarkan berbilang kejadian satu model dikaitkan dengan satu kejadian yang lain. Dengan menyatakan unique=True, serupa dengan OneToOneField(), ForeignKey() menguatkuasakan keunikan perhubungan. Tidak seperti OneToOneField(), bahagian "terbalik" perhubungan ForeignKey() mengembalikan QuerySet, bukan satu objek.

Contoh:

Pertimbangkan dua contoh model:

  • Model kereta: Menggunakan OneToOneField(Enjin)
  • Model Kereta2: Menggunakan ForeignKey(Enjin2, unique=True)

Melaksanakan arahan berikut dalam shell Python manage.py menunjukkan perbezaan dalam tingkah laku perhubungan:

Contoh OneToOneField:

>>> from testapp.models import Car, Engine
>>> c = Car.objects.get(name='Audi')
>>> e = Engine.objects.get(name='Diesel')
>>> e.car
<Car: Audi>
Salin selepas log masuk

ForeignKey dengan unique=True Contoh:

>>> from testapp.models import Car2, Engine2
>>> c2 = Car2.objects.get(name='Mazda')
>>> e2 = Engine2.objects.get(name='Wankel')
>>> e2.car2_set.all()
[<Car2: Mazda>]
Salin selepas log masuk

Dalam contoh OneToOneField(), mengakses objek berkaitan "reverse" (e.car) mengambil satu contoh Kereta, manakala dalam ForeignKey( ) contoh, mengakses QuerySet berkaitan "terbalikkan" (e2.car2_set.all()) mengembalikan semua kejadian Car2 yang berkaitan.

Memahami perbezaan ini membolehkan pembangun memilih jenis medan hubungan yang sesuai berdasarkan keperluan perhubungan khusus dalam model Django mereka.

Atas ialah kandungan terperinci Apakah perbezaan antara OneToOneField() dan ForeignKey() dalam Django, dan bagaimanakah perhubungan terbalik mereka berkelakuan?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!