OneToOneField vs ForeignKey dalam Django: Memahami Perbezaan Utama
Dalam pemodelan pangkalan data untuk aplikasi Django, memilih jenis medan yang sesuai untuk mewakili perhubungan ialah penting. Dua jenis medan yang biasa digunakan ialah OneToOneField dan ForeignKey. Kedua-duanya mewujudkan hubungan antara dua model, tetapi dengan ciri yang berbeza dan senario penggunaan.
OneToOneField
OneToOneField mewujudkan hubungan satu-dengan-satu antara model. Ia secara konseptual bersamaan dengan ForeignKey dengan pilihan unique=True ditetapkan kepada True. Walau bagaimanapun, hubungan terbalik untuk OneToOneField mengembalikan objek tunggal secara langsung. Ini bermakna anda boleh mengakses objek yang berkaitan tanpa memerlukan pertanyaan tambahan.
ForeignKey
Sebaliknya, ForeignKey mencipta satu-ke-banyak hubungan di mana satu objek boleh mempunyai banyak objek yang berkaitan. Apabila menggunakan ForeignKey dengan pilihan unique=True, ia mewujudkan hubungan satu-dengan-satu "de facto". Walau bagaimanapun, hubungan terbalik mengembalikan Set Query, membolehkan anda mengakses semua objek berkaitan.
Contoh: Menghubungkan Kereta dan Enjin
Untuk menggambarkan perbezaan, pertimbangkan Kereta yang dipermudahkan ini dan model Enjin:
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 Car2(models.Model): name = models.CharField(max_length=25) engine = models.ForeignKey(Engine2, unique=True, on_delete=models.CASCADE)
Demonstrasi dalam Python Shell:
Menggunakan shell Python, kita boleh mencipta kejadian dan mengakses objek yang berkaitan:
Contoh OneToOneField:
>>> e = Engine.objects.get(name='Diesel') >>> c = Car.objects.get(name='Audi') >>> e.car <Car: Audi>
ForeignKey dengan unique=True Contoh:
>>> e2 = Engine2.objects.get(name='Wankel') >>> c2 = Car2.objects.get(name='Mazda') >>> e2.car2_set.all() [<Car2: Mazda>]
Dalam contoh OneToOneField, e.car terus mengembalikan contoh Kereta. Sebaliknya, untuk ForeignKey dengan unique=True, e2.car2_set.all() mengembalikan QuerySet yang mengandungi satu contoh Car2.
Memahami perbezaan halus antara OneToOneField dan ForeignKey adalah penting untuk mereka bentuk hubungan pangkalan data yang berkesan dalam aplikasi Django . Pilih jenis medan yang sesuai berdasarkan sifat perhubungan antara model untuk mengoptimumkan prestasi dan integriti data.
Atas ialah kandungan terperinci Bila hendak menggunakan OneToOneField lwn. ForeignKey dalam Django: Panduan Terperinci. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!