ในตอนที่ 8 นี้จะได้นำเอา entity ทั้งหมดมาสร้างเป็น model ในไฟล์ที่ชื่อ models.py แนะนำให้กลับไปดู entity ของ northwind ว่ามี entity ใดบ้างที่ยังไม่ได้สร้าง ให้กลับไปอ่านในตอนที่ 3 หรือคลิกดูเฉพาะรูปภาพที่นี่
....
จาก entity ของ Nortwind ที่ได้สร้างไว้แล้วมี 3 entity ได้แก่ Categories, Porducts และ Suppliers ที่ยังไม่ได้สร้างใน model ประกอบด้วย employees, orders, customers, orderDetails สำหรับ shiper นั้นจะไม่ขอทำในตัวอย่างนี้นะครับ และฟิลด์บางฟิลด์ของ Northwind ใน Access กับที่ผมนำมาประยุกต์จะแตกต่างกันบ้างเพื่อความเหมาะสม แต่สาระสำคัญยังมีอยู่ครบ
.....
มาเริ่มสร้าง model กันต่อดีกว่า ด้วยการ
- เปิดไฟล์ models.py แล้วพิมพ์คำสั่งต่อไปนี้ต่อท้ายบรรทัดสุดท้าย ระมัดระวังการจัดย่อหน้านะครับ ภาษาไพธอน สนใจการจัดย่อหน้า พอ ๆ กับ Case sensitive
|
class Customers(models.Model): CustName = models.CharField(max_length=50,verbose_name='ชื่อ') CustLName = models.CharField(max_length=70,verbose_name='นามสกุล') Address = models.CharField(max_length=100,verbose_name='บ้านเลขที่ ถนน ตำบล') District = models.CharField(max_length=100,verbose_name='อำเภอ') Province = models.CharField(max_length=100,verbose_name='จังหวัด') PostalCode = models.CharField(max_length=5,verbose_name='รหัสไปรษณีย์') Phone = models.CharField(max_length=12,blank=True,verbose_name='โทรศัพท์') Mobile = models.CharField(max_length=13,blank=True ,verbose_name='โทรศัพท์เคลื่อนที่')
verbose_name_plural = "ข้อมูลลูกค้า" verbose_name = "ข้อมูลลูกค้า" ordering = ['CustName']
return u"%s %s" % (self.CustName, self.CustLName)
class Employee(models.Model): Title = models.CharField(max_length=20,verbose_name='คำนำหน้าชื่อ') EmpName = models.CharField(max_length=50,verbose_name='ชื่อ') EmpLName = models.CharField(max_length=50,verbose_name='นามสกุล') Position = models.CharField(max_length=50,verbose_name='ตำแหน่ง') BirthDate = models.DateField(verbose_name='วันเดือนปีเกิด') HireDate = models.DateField(verbose_name='วันเดือนปีเริ่มงาน') Address = models.CharField(max_length=100,verbose_name='บ้านเลขที่ ถนน ตำบล') District = models.CharField(max_length=100,verbose_name='อำเภอ') Province = models.CharField(max_length=100,verbose_name='จังหวัด') PostalCode = models.CharField(max_length=5,verbose_name='รหัสไปรษณีย์') Phone = models.CharField(max_length=12,blank=True,verbose_name='โทรศัพท์') Mobile = models.CharField(max_length=13,blank=True ,verbose_name='โทรศัพท์เคลื่อนที่') Photo = models.ImageField(verbose_name='ภาพถ่าย', upload_to='photos/%Y/%m/%d')
verbose_name_plural = "ข้อมูลพนักงาน" verbose_name = "ข้อมูลพนักงาน" ordering = ['EmpName']
return u"%s%s %s" % (self.Title, self.EmpName, self.EmpLName)
OrderID = models.AutoField(primary_key=True,verbose_name='รหัส') OrderDate = models.DateField(verbose_name='วันที่สั่งซื้อ') Customer = models.ForeignKey(Customers,verbose_name='ชื่อลูกค้า') Employee = models.ForeignKey(Employee,verbose_name='พนักงานขาย')
verbose_name_plural = "ข้อมูลการสั่งซื้อ" verbose_name = "ข้อมูลการสั่งซื้อ" ordering = ['OrderDate']
return u"%s %s" % (self.OrderID, self.Customer)
OrderID = models.ForeignKey(Orders,verbose_name='รหัสสั่งซื้อ-ชื่อลูกค้า') ProdID = models.ForeignKey(Products,verbose_name='รหัสสินค้า-ชื่อสินค้า') Price = models.DecimalField(max_digits=10,decimal_places=2,verbose_name='ราคาต่อหน่วย') qty = models.DecimalField(max_digits=10,decimal_places=2,verbose_name='จำนวน') discount = models.DecimalField(max_digits=5,decimal_places=2,verbose_name='ส่วนลด')
verbose_name_plural = "ข้อมูลการซื้อ" verbose_name = "ข้อมูลการซื้อ" ordering = ['id']
return u"%s %s %s" % (self.id, self.OrderID,self.ProdID)
|
- File > Save
- c:\repository\django\bin\bmis >manage.py syncdb
- ถ้าเครื่องของใครมันเตือนเรื่อง imageFields ก็เพราะว่ายังไม่ได้ติดตั้ง Python Image Library เพราะฉะนั้นให้ไปติดตั้งตามคำแนะนำในตอน การติดตั้ง PIL
...
ขั้นตอนต่อไปเป็นการ register โมเดลที่สร้างขึ้นใหม่ให้หน้าอินเทอร์เฟสของ admin รู้จักทุก ๆ entity ซึ่งมีขั้นตอน ดังนี้
- เปิดไฟล์ admin.py ซึ่งมีคำสั่งเดิมอยู่ 5 บรรทัด
- ให้เพิ่ม entity ที่เพิ่มขึ้นมาใหม่จำนวน 3 entity ด้วยคำสั่งคล้าย ๆ กับของเก่า ดีงนี้
admin.site.register(Employee)
admin.site.register(Orders)
admin.site.register(OrderDetails)
admin.site.register(Customers)
- File > Save
- c:\repository\django\bin\bmis >manage.py runserver
...
ทดลองการทำงานด้วยการเปิด Browser และไปที่ localhost:8000/admin/
- login เข้าสู่ระบบ
- คลิกที่ เพิ่ม ข้อมูลพนักงาน จะได้ฟอร์มที่มีหน้าตาแบบนี้ครับ

...
สรุป จะเห็นว่าหน้าตาของฟอร์มต่าง ๆ จะมีลักษณะเป็นไปตามชนิดของฟิลด์ ที่เรากำหนด เช่น วันเดือนปีเกิด เราใช้ DateField() ดังนั้น หน้าตาของฟอร์มมันจะสร้างปฏิทินให้ผู้ใช้คลิก เพื่อเลือกป้อนวันที่ ซึ่งในภาษาจาวาสคริปต์เขาเรียกแบบนี้ว่า datepicker และที่โดดเด่นกว่านี้ ถ้าในกรณีที่ไม่ต้องการให้ผู้ใช้ป้อนเลยจะใช้ option เพิ่มเติมเป็น
auto_now_add=True
หรือ กำหนดค่าเริ่มเติ่มให้กับวันที่ เป็นวันนี้ ใช้คำสั่ง
auto_now=True
วันนี้ขอแนะนำเพียงเท่านี้ก่อน ในครั้งหน้าจะมาปรับแต่งฟอร์มให้มีหน้าตาคล้ายกับ Northwind ครับ
----