Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah Perbezaan Utama Antara OneToOneField() dan ForeignKey() Unik dalam Django?
OneToOneField() vs ForeignKey() dalam Django: Meneroka Perbezaan Hubungan
Di alam Django, fahami perbezaan antara OneToOneField() dan ForeignKey() adalah penting untuk mewujudkan perhubungan yang sesuai antara model.
OneToOneField()
OneToOneField() mewujudkan hubungan satu dengan satu antara dua model. Ia berfungsi sama dengan ForeignKey() dengan unique=True, tetapi berbeza dalam cara ia mendapatkan semula objek yang berkaitan. Hubungan "terbalik" dalam OneToOneField() secara langsung mengembalikan objek tunggal, manakala hubungan "terbalik" dalam ForeignKey() mengembalikan Set Query.
ForeignKey()
Dalam perhubungan ForeignKey(), model boleh berkongsi nilai kunci utama mereka untuk mencipta sambungan banyak-ke-satu. Menambah unique=True to a ForeignKey() mengehadkan perhubungan kepada one-to-one, serupa dengan OneToOneField(). Walau bagaimanapun, perbezaan utama terletak pada tingkah laku hubungan "terbalik": ForeignKey() mengembalikan QuerySet untuk objek berkaitan.
Perbandingan
Untuk menggambarkan perbezaan, pertimbangkan model berikut:
class Engine(models.Model): name = models.CharField(max_length=25) class Car(models.Model): name = models.CharField(max_length=25) engine = models.OneToOneField(Engine) class Engine2(models.Model): name = models.CharField(max_length=25) class Car2(models.Model): name = models.CharField(max_length=25) engine = models.ForeignKey(Engine2, unique=True)
Dalam model Kereta, enjin ditetapkan sebagai OneToOneField() kepada Enjin. Ini bermakna contoh Kereta hanya boleh mempunyai satu tikar Enjin, dan sebaliknya.
Dalam model Car2, enjin ditetapkan sebagai ForeignKey() dengan unique=True to Engine2. Ini juga mengehadkan perhubungan kepada satu dengan satu, tetapi perbezaannya terletak pada hasil pertanyaan.
Menyiasat Perhubungan
Apabila menanyakan perhubungan OneToOneField() dalam cangkerang Python:
from testapp.models import Car, Engine c = Car.objects.get(name='Audi') e = Engine.objects.get(name='Diesel') e.car
Ia akan mengembalikan secara langsung tika Kereta yang dikaitkan dengan tika Enjin.
Sebaliknya, apabila menanyakan ForeignKey() dengan hubungan unique=True:
from testapp.models import Car2, Engine2 c2 = Car2.objects.get(name='Mazda') e2 = Engine2.objects.get(name='Wankel') e2.car2_set.all()
Ia akan mengembalikan QuerySet yang mengandungi tika Car2 yang dikaitkan dengan tika Engine2.
Kesimpulan
OneToOneField() dan ForeignKey() kedua-duanya mewujudkan hubungan antara model, tetapi perbezaannya terletak pada cara mereka mengurus objek berkaitan dan mengembalikan hasil pertanyaan. Memahami nuansa ini adalah penting untuk mereka bentuk hubungan objek yang berkesan dalam aplikasi Django.
Atas ialah kandungan terperinci Apakah Perbezaan Utama Antara OneToOneField() dan ForeignKey() Unik dalam Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!