วันพุธที่ 4 ธันวาคม พ.ศ. 2556

Django documentation First steps Tutorial: Part 2

Writing your first Django app, part 2
จากบทความที่แล้วเป็นการทดลองใช้ API ของ Django ใน part 2 นี้จะทดลองการใช้ Web-poll application ผ่าน Django Administration ขั้นแรกเราพิมพ์ Command
 python manage.py runserver  


ครั้งนี้ให้ทำการเข้า URL: http://127.0.0.1:8000/admin/ จะพบกับหน้าต่างให้ล็อกอินเข้า Django Administration โดยใส่ username/password ที่ได้จากบทความที่แล้ว(superuser) กรณีที่ไม่ได้กำหนดไว้หรือลืม username/password ให้ใช้ Command ด้านล่างเพื่อสราง superuser 
 python manage.py createsuperuser  


Enter the admin site
เมื่อล็อกอินเข้ามาจะพบกับหน้าต่างดังรูป


Make the poll app modifiable in the admin
จะเห็นว่าจะมี แต่ Auth เท่านั้นยังไม่มี app polls ซึ่งเราจะทำการเพิ่มเข้าไปโดยแก้ไขที่ polls/admin.py ตามนี้
 from django.contrib import admin  
 from polls.models import Poll  
   
 admin.site.register(Poll)  
จากนั้นลองทำการ refresh browser ของคุณดูจะได้ดังรูป


Explore the free admin functionality
ทดลองใช้งานส่วนต่างๆ ใน Django administration
Add poll What's up
Add successfully
Change poll What's up to What's time?
Show history poll What's time?
Show recent actions


Customize the admin form
ต่อไปจะเป็นการทดลองปรับแต่งส่วนต่างๆ ของ admin form เริ่มจากทำการสลับตำแหน่งของ Question กับ Date published โดยแก้ไขตามดังต่อไปนี้
 from django.contrib import admin  
 from polls.models import Poll  
   
 class PollAdmin(admin.ModelAdmin):  
   fields = ['pub_date', 'question']  
   
 admin.site.register(Poll, PollAdmin)  
จะพบว่าตำแหน่งของทั้งสองจะถูกสลับตำแหน่งกัน














ต่อไปจะเป็นการเซ็็ท fields ของทั้งสอง attribute โดยเพิ่ม fieldsets ของ attribute Question จะไม่มี field หัวข้อส่วน fieldsets ของ attribute pub_date จะมี field ชื่อ Date information
 from django.contrib import admin  
 from polls.models import Poll  
   
 class PollAdmin(admin.ModelAdmin):  
   fieldsets = [  
     (None,        {'fields': ['question']}),  
     ('Date information', {'fields': ['pub_date']}),  
   ]  
   
 admin.site.register(Poll, PollAdmin)  
















จากนั้นจะทดลองการยุบตัวลงของหัวข้อ Date information เมื่อคลิกถึงแสดงรายละเอียดที่มี ด้วยการแก้ไขตามโค้ดด้านล่าง
 from django.contrib import admin  
 from polls.models import Poll  
   
 class PollAdmin(admin.ModelAdmin):  
   fieldsets = [  
     (None,        {'fields': ['question']}),  
     ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),  
   ]  














Adding related objects
ที่ผ่านมาเราได้ทดลอง admin form ส่วนต่างๆ รวมทั้ง ส่วนของ poll ต่อไปเราจะเพิ่มส่วนของ choice เพื่อดูความสัมพันธ์ของทั้งสอง class นี้รูปแบบก็เหมือนกับที่ผ่านมาดังโค้ดที่เพิ่มส่วนของ choice ขึ้นมาตามด้านล่าง
 from django.contrib import admin  
 from polls.models import Choice  
   
 admin.site.register(Choice)  
ผลที่ได้คือจะมีส่วนของ choice เพิ่มเข้ามา

ต่อไปจะเป็นการทดลองการนำ choice เข้าไปไว้ในส่วนของ poll ทำใ้ห้การแก้ไขหรือเพิ่มใหม่สามารถทำได้ทั้ง choice และ poll พร้อมกันในหน้าเดียว
 from django.contrib import admin  
 from polls.models import Choice, Poll  
   
 class ChoiceInline(admin.StackedInline):  
   model = Choice  
   extra = 3  
   
 class PollAdmin(admin.ModelAdmin):  
   fieldsets = [  
     (None,        {'fields': ['question']}),  
     ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),  
   ]  
   inlines = [ChoiceInline]  
   
 admin.site.register(Poll, PollAdmin)  
จากรูปด้านล่างจะเห็นทั้้งสองส่วนอยู่ในหน้า Add poll
 จำนวน choice ที่ขึ้นมาสามารถเพิ่มได้จาก 3 เป็น 4,5,6 ... จากการคลิกที่ Add another Choice และลบได้ที่มุมขวาของ choice ที่เพิ่มเข้ามา แต่ไม่สามารถลบ 3 choice ที่มาตั้งแต่ครั้งแรกได้
จะพบว่าปัญหาของการเพิ่ม choice แบบ stacked ทำให้เปลืองพื้นที่ของหน้าเวปมาก ดังนั้น Django จึงได้เพิ่มการรับข้อมูลแบบ tabular ทำให้เพื่อให้สะดวกต่อการใช้งานมากขึ้น โดยแก้ไขโค้ดในส่วน ChoiceInline
 class ChoiceInline(admin.TabularInline):  
   #...  
หน้าต่างของแบบ tabular


Customize the admin change list
หน้าตาปกติ
มาถึงส่วนสุดท้ายของบทความนี้ จะเป็นส่วนทดลองปรับแต่ง admin change list เริ่มจากเพิ่ม list display
 class PollAdmin(admin.ModelAdmin):  
   # ...  
   list_display = ('question', 'pub_date')  
หลังจากเพิ่ม question และ pub_date
เพิ่ม was_published_recently เข้ามาใน list display
 class PollAdmin(admin.ModelAdmin):  
   # ...  
   list_display = ('question', 'pub_date', 'was_published_recently')  
หลังจากเพิ่ม was_published_recently
เปลี่ยนสเตตัสช่อง Was published recently ให้เป็นเครื่องหมาย
 class Poll(models.Model):  
   # ...  
   def was_published_recently(self):  
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1)  
   was_published_recently.admin_order_field = 'pub_date'  
   was_published_recently.boolean = True  
   was_published_recently.short_description = 'Published recently?'hed_recently')  


เพิ่ม list filter ของ pub_date
 list_filter = ['pub_date']  



เพิ่ม search fields ของ question
 search_fields = ['question']  




Reference
https://docs.djangoproject.com/en/1.6/intro/tutorial02/

ไม่มีความคิดเห็น:

แสดงความคิดเห็น