Rumah > Artikel > pembangunan bahagian belakang > Apakah perbezaan antara OneToOneField() dan ForeignKey() dalam Django, dan bagaimanakah perhubungan terbalik mereka berkelakuan?
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:
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>
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>]
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!