Django Relationship ตอนที่ 2 Many-To-Many

pwpk
2 min readNov 18, 2019

--

ขอยกตัวอย่างให้เกี่ยวกับ พิซซ่าเหมือนกันตอนที่ 1 One-To-Many ก็แล้วกัน แต่ครั้งนี้จะเป็นการบอกว่า พิซซ่าแต่ละเมนูใช้ท๊อปปิ้งอะไรบ้าง และ ท๊อปปิ้งแต่ละอย่างใช้กับพิซซ่าหน้าอะไรบ้าง

models.py

จากโค้ดด้านบนจะเห็นได้ว่ามีการใช้ relation field

ManyToManyField

และข้างใน ManyToManyField ก็จะมี attribute ที่น่าสนใจ 2 ตัวคือ

related_name

verbose_name

โดยสามารถอธิบายตามสีไฮไลท์ได้ดังภาพ ตามด้านล่าง

สีเหลือง : หมายความว่าหนึ่งหน้า Pizza มีหลาย toppings
สีเขียว : หมายความว่าหนึ่ง Topping ใช้กับหลายหน้า pizzas
ให้สังเกตุคำที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่ นั้นคือชื่อ class
และคำที่ขึ้นตั้นตัวตัวพิมพ์เล็ก นั้นคือชื่อความสัมพันธ์ว่ามีหลากหลาย เลยลงท้ายดัวย s
ก็สื่อความหมายดีนะ

ทีนี้มาลองดูที่หน้า admin

เพิ่มท๊อปปิ้งเข้าในระบบ
เพิ่มหน้าพิซซ่าเข้าในระบบ >> จะเห็นคำว่า ‘ท๊อปปิ้งที่ใส่’ ก็คือ verbose_name นั้นเอง

views.py

เป็น class based view ตามแบบฝึกหัดทั่วไป

การแสดงผลบน html

1. พิซซ่าแสดงก่อน แล้วตามด้วยท๊อปปิ้งที่ใส่

ผลที่ได้

2. ท๊อปปิ้งแสดงก่อน ตามด้วยพิซซ่าหน้าที่ใช้

ผลที่ได้

การเข้าถึง objects ใน many-to-many ก็จะเรียกผ่าน related_name และ .all

จบแล้วจ้า

--

--

No responses yet