Django Academy · Pelajaran

ManyToManyField dan Model Through

Sambungkan rekod dalam kedua-dua arah dengan data tambahan.

Pelajaran 2 daripada 413 langkah

ManyToManyField dan Model Through ialah pelajaran Django Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Django Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Django Academy merangkumi sejumlah 4 pelajaran.

Kedua-dua Sisi Mempunyai Banyak

Kadang-kadang setiap sisi dipautkan kepada banyak objek di sisi yang lain: satu kiriman mempunyai banyak tag, dan satu tag menandai banyak kiriman. Itulah hubungan banyak-ke-banyak.

Mengisytiharkan ManyToManyField

Tambahkan ManyToManyField yang menunjuk kepada model yang lain. Django menguruskan pautan dari kedua-dua arah secara automatik.

class Post(models.Model):
    tags = models.ManyToManyField(Tag)

Jadual Cantuman Tersembunyi

Di sebalik tabir, Django membina jadual cantuman yang menyimpan pasangan id. Tiada lajur baharu ditambahkan pada mana-mana daripada dua model anda.

Menambah Hubungan

Selepas kiriman disimpan, lampirkan tag menggunakan add. Anda boleh menghantar beberapa objek serentak dalam satu panggilan.

post.tags.add(python_tag, web_tag)

Mengalih Keluar dan Mengosongkan

Buang satu pautan menggunakan remove, atau padamkan semuanya menggunakan clear. Objek berkaitan itu sendiri kekal selamat.

post.tags.remove(web_tag)
post.tags.clear()

Membaca Set

Akses baris yang dipautkan melalui medan itu seperti pengurus biasa. Panggil all untuk mengulangi semua yang berkaitan.

for tag in post.tags.all():
    print(tag.name)

Apabila Pautan Memerlukan Data

Bagaimana jika keahlian mempunyai fakta tersendiri, seperti tarikh menyertai? Jadual cantuman biasa tidak boleh menyimpan lajur tambahan, jadi anda memerlukan lebih banyak kawalan.

Model through

Model through ialah jadual anda sendiri untuk hubungan tersebut. Model ini membolehkan setiap pautan membawa medan tambahan yang anda tentukan.

members = models.ManyToManyField(User, through="Membership")

Mentakrifkan Kelas through

Model through menyimpan ForeignKey kepada setiap sisi serta sebarang medan tambahan. Lajur tersebut menerangkan hubungan itu sendiri.

class Membership(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    joined = models.DateField()

add Tidak Lagi Berfungsi

Dengan model through tersuai, add biasa dilumpuhkan. Anda mencipta pautan dengan membuat baris through secara terus.

Membership.objects.create(user=u, group=g, joined=today)

Membuat Pertanyaan Merentasi M2M

Tapis merentasi pautan banyak-ke-banyak menggunakan garis bawah berganda, sama seperti ForeignKey. Jadual cantuman diuruskan untuk anda.

Post.objects.filter(tags__name="python")

Semakan Ringkas

Keahlian kumpulan anda perlu merekodkan masa setiap pengguna menyertai kumpulan. Apakah yang perlu anda gunakan?

Imbas Kembali

Bagus! ManyToManyField memautkan kedua-dua sisi secara bebas, manakala model through membolehkan setiap hubungan membawa datanya sendiri. 🏷️

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “ManyToManyField dan Model Through” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Django Academy, termasuk “ManyToManyField dan Model Through”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Django Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “ManyToManyField dan Model Through”?

Sambungkan rekod dalam kedua-dua arah dengan data tambahan. Anda berlatih Django Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Django Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Django Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “ManyToManyField dan Model Through” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Django Academy ini?

Ya. Setiap pelajaran Django Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. ForeignKey dan on_delete
  2. ManyToManyField dan Model Through
  3. OneToOneField untuk Profil
  4. related_name dan Carian Songsang
← Kembali ke Django Academy