ขอยกตัวอย่างให้เกี่ยวกับ พิซซ่าเหมือนกันตอนที่ 1 One-To-Many ก็แล้วกัน แต่ครั้งนี้จะเป็นการบอกว่า พิซซ่าแต่ละเมนูใช้ท๊อปปิ้งอะไรบ้าง และ ท๊อปปิ้งแต่ละอย่างใช้กับพิซซ่าหน้าอะไรบ้าง
models.py
จากโค้ดด้านบนจะเห็นได้ว่ามีการใช้ relation field
ManyToManyField
และข้างใน ManyToManyField ก็จะมี attribute ที่น่าสนใจ 2 ตัวคือ
related_name
verbose_name
โดยสามารถอธิบายตามสีไฮไลท์ได้ดังภาพ ตามด้านล่าง
สีเหลือง : หมายความว่าหนึ่งหน้า Pizza มีหลาย toppings
สีเขียว : หมายความว่าหนึ่ง Topping ใช้กับหลายหน้า pizzasให้สังเกตุคำที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่ นั้นคือชื่อ class
และคำที่ขึ้นตั้นตัวตัวพิมพ์เล็ก นั้นคือชื่อความสัมพันธ์ว่ามีหลากหลาย เลยลงท้ายดัวย sก็สื่อความหมายดีนะ
ทีนี้มาลองดูที่หน้า admin
views.py
เป็น class based view ตามแบบฝึกหัดทั่วไป
การแสดงผลบน html
1. พิซซ่าแสดงก่อน แล้วตามด้วยท๊อปปิ้งที่ใส่
ผลที่ได้
2. ท๊อปปิ้งแสดงก่อน ตามด้วยพิซซ่าหน้าที่ใช้
ผลที่ได้
การเข้าถึง objects ใน many-to-many ก็จะเรียกผ่าน related_name และ .all
จบแล้วจ้า