แก้ปัญหา Custom? Always True เมื่อสร้าง DocType ใน Frappe 16
วิธีแก้ไขปัญหา Custom checkbox ติดอยู่ตลอดเมื่อสร้าง DocType ใหม่ใน Frappe 16 แม้เปิด Developer Mode แล้ว - ต้องใช้ bench set-config แทนการแก้ไข JSON

เมื่อสร้าง DocType ใหม่ใน Frappe 16 แล้วพบว่า checkbox "Custom?" ติดเลือกอยู่ตลอดและไม่สามารถยกเลิกได้ แม้จะเปิด Developer Mode แล้วก็ตาม บทความนี้จะอธิบายสาเหตุและวิธีแก้ไขที่ถูกต้อง
ปัญหา (Problem)
เมื่อคลิก "Create New DocType" ใน Frappe 16 จะพบว่า checkbox "Custom?" ถูกเลือกไว้และไม่สามารถยกเลิกได้ (read-only) แม้ว่าจะตั้งค่า developer_mode: 1 ใน site_config.json แล้วก็ตาม

ตรวจสอบ site_config.json
{
"db_name": "_139d3e8086da46e7",
"developer_mode": 1,
"maintenance_mode": 0
}
แม้จะตั้งค่า developer_mode: 1 แล้ว แต่ปัญหายังคงอยู่
สาเหตุ (Root Cause)
ใน Frappe 16 มีการตรวจสอบ 2 เงื่อนไขก่อนอนุญาตให้สร้าง Standard DocType (non-custom):
// จาก frappe/core/doctype/doctype/doctype_list.js
let non_developer = frappe.session.user !== "Administrator" || !frappe.boot.developer_mode;
เงื่อนไขคือ:
- User ต้องเป็น "Administrator" - ไม่ใช่แค่ System Manager role
frappe.boot.developer_modeต้องเป็น true
ปัญหาที่แท้จริง
เมื่อแก้ไข site_config.json โดยตรง (manual edit) ค่า config จะถูก cache ไว้ใน Redis และไม่ถูก update ทำให้ frappe.boot.developer_mode ยังคงเป็น 0 หรือ undefined
วิธีแก้ไข (Solution)
วิธีที่ถูกต้อง: ใช้ bench set-config
# ตั้งค่า developer_mode ผ่าน CLI
bench set-config -g developer_mode 1
คำสั่งนี้จะ:
- อัพเดท
site_config.json - Clear cache โดยอัตโนมัติ
- ทำให้
frappe.boot.developer_modeถูกตั้งค่าอย่างถูกต้อง
ถ้าแก้ไข JSON แล้ว ต้อง Clear Cache
หากแก้ไข JSON โดยตรงไปแล้ว ให้ clear cache:
bench --site [sitename] clear-cache
ตรวจสอบว่า Developer Mode ทำงาน
bench --site [sitename] console
>>> frappe.conf.developer_mode
1
สิ่งที่ควรระวัง (Gotchas)
- อย่าแก้ไข JSON โดยตรง - ใช้
bench set-configเสมอ - Login เป็น Administrator - ไม่ใช่แค่ user ที่มี System Manager role
- common_site_config.json - ถ้ามีการตั้ง
developer_mode: 0ใน common config อาจ override site config ได้
ตรวจสอบ common_site_config.json
cat ~/frappe-bench/sites/common_site_config.json | grep developer
ถ้าพบ "developer_mode": 0 ให้แก้ไขด้วย:
bench set-config -g developer_mode 1
สรุป (Summary)
บทความนี้ได้แสดงวิธีแก้ปัญหา "Custom?" checkbox ที่ติดอยู่ตลอดใน Frappe 16:
- สาเหตุ: การแก้ไข
site_config.jsonโดยตรงไม่ได้ clear cache ทำให้frappe.boot.developer_modeไม่ถูก update - วิธีแก้: ใช้
bench set-config -g developer_mode 1แทนการแก้ไข JSON - ข้อควรจำ: ต้อง login เป็น Administrator (ไม่ใช่แค่ System Manager) ถึงจะสร้าง Standard DocType ได้
อ้างอิง (References)
- Frappe Framework Documentation
- Frappe Developer Mode Guide
- Source code:
frappe/core/doctype/doctype/doctype_list.js