อินไลน์และฟิลด์อ่านอย่างเดียว
แก้ไขแถวข้อมูลที่เกี่ยวข้องแบบอินไลน์และป้องกันการแก้ฟิลด์
อินไลน์และฟิลด์อ่านอย่างเดียว เป็นบทเรียน Django Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Django Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Django Academy มีบทเรียนทั้งหมด 4 บทเรียน
แก้ไขแถวที่เกี่ยวข้องพร้อมกัน
บางครั้งระเบียนที่เกี่ยวข้องควรอยู่ในหน้าเดียวกัน ฟอร์มแทรกช่วยให้คุณแก้ไขแถวลูกได้โดยตรงภายในแบบฟอร์มแก้ไขของแถวแม่ 🧩
รูปแบบฟอร์มแทรกสองแบบ
Django มีเค้าโครงให้เลือกสองแบบ TabularInline แสดงแถวในตารางขนาดกะทัดรัด ส่วน StackedInline จะวางแต่ละแถวเป็นบล็อกของตัวเอง
กำหนดฟอร์มแทรก
สร้างคลาสขนาดเล็กที่สืบทอดจาก TabularInline และกำหนดแอตทริบิวต์ model ให้ชี้ไปยังโมเดลลูกที่ต้องการฝัง
class CommentInline(admin.TabularInline):
model = Commentเชื่อมต่อกับแถวแม่
ใส่ฟอร์มแทรกไว้ในส่วนดูแลระบบของแถวแม่ ตัวเลือก inlines จะบอก Django ให้แสดงแถวลูกเหล่านั้นภายในแบบฟอร์มของแถวแม่
class PostAdmin(admin.ModelAdmin):
inlines = [CommentInline]แถวว่างสำรอง
ฟอร์มแทรกจะแสดงแถวว่างสำหรับเพิ่มข้อมูลอย่างรวดเร็ว กำหนด extra เพื่อควบคุมจำนวนช่องว่างที่แสดง โดยทั่วไปมีเพียงหนึ่งช่องก็เพียงพอ
extra = 1ข้อกำหนดของ FK
ฟอร์มแทรกจะทำงานได้ก็ต่อเมื่อโมเดลลูกมี ForeignKey ไปยังโมเดลแม่ ลิงก์นี้ทำให้ Django ทราบว่าแถวใดเป็นของกลุ่มเดียวกัน
ป้องกันการแก้ไขฟิลด์
ค่าบางอย่างควรแสดงให้เห็นแต่ไม่ควรแก้ไขด้วยตนเอง เพิ่มค่าดังกล่าวลงใน readonly_fields แล้วส่วนดูแลระบบจะแสดงค่าเหล่านั้นเป็นแบบล็อกไว้ 🔒
readonly_fields = ("created", "updated")ประทับเวลาอัตโนมัติ
ฟิลด์อย่างวันที่ที่ใช้ auto_now_add ถูกกำหนดโดย Django ไม่ใช่ผู้ใช้ การกำหนดให้เป็น readonly ช่วยป้องกันการแก้ไขที่ทำให้สับสนและบันทึกไม่ได้
แสดงค่าที่คำนวณ
readonly_fields ยังระบุเมธอดได้ด้วย ทำให้คุณแสดงค่าที่คำนวณขึ้นและไม่มีคอลัมน์จริงในฐานข้อมูลได้
def word_count(self, obj):
return len(obj.body.split())ฟิลด์อ่านอย่างเดียวในฟอร์มแทรก
ฟอร์มแทรกก็รองรับ readonly_fields เช่นกัน ใช้เพื่อแสดงข้อมูลของแถวลูกอย่างชัดเจน พร้อมป้องกันไม่ให้แก้ไขคอลัมน์ที่มีข้อมูลสำคัญ
สิทธิ์ยังคงมีผล
โหมดอ่านอย่างเดียวเกี่ยวข้องกับแบบฟอร์ม ไม่ใช่ความปลอดภัย การเข้าถึงจริงถูกควบคุมโดยสิทธิ์ของผู้ใช้ ดังนั้นควรใช้ทั้งสองอย่างร่วมกันเพื่อการแก้ไขที่ปลอดภัย
ตรวจสอบอย่างรวดเร็ว
โมเดลต้องมีอะไรจึงจะปรากฏเป็นฟอร์มแทรกได้
ทบทวน
คุณฝังแถวที่เกี่ยวข้องด้วย inlines และล็อกค่าที่มีข้อมูลสำคัญด้วย readonly_fields ทั้งสองอย่างร่วมกันทำให้การแก้ไขในส่วนดูแลระบบมีความสามารถหลากหลายและปลอดภัย ✅
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “อินไลน์และฟิลด์อ่านอย่างเดียว” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “อินไลน์และฟิลด์อ่านอย่างเดียว” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Django Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Django Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “อินไลน์และฟิลด์อ่านอย่างเดียว”
แก้ไขแถวข้อมูลที่เกี่ยวข้องแบบอินไลน์และป้องกันการแก้ฟิลด์ คุณปฏิบัติ Django Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Django Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Django Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “อินไลน์และฟิลด์อ่านอย่างเดียว” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Django Academy นี้ได้ไหม
ได้ บทเรียน Django Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- createsuperuser และการเข้าสู่ระบบ
- ลงทะเบียนโมเดลด้วย admin.site
- ปรับแต่ง ModelAdmin
- อินไลน์และฟิลด์อ่านอย่างเดียว