EditLockModelAdmin
最近在玩 Django,覺得他是一個不錯的 Framework。以前用 php 寫東西的時候,如果不搭配任何 Framework 時,總得自己處理所有的東西。現在透過 Django 就可以將寫程式的機會,降到最低,提高開發的速度。
舉例,Django 提供了一個名為 django.contrib.admin 的 module,可以快速的開發 Model 的管理介面。通常我們只需建立一個繼承自 django.contrib.admin.ModelAdmin 的類別即可:
from django.cotrib import admin class MyModelAdmin(admin.ModelAdmin): list_display = [ 'name', 'date', 'description' ] admin.site.register(MyModel, MyModelAdmin)
不過,ModelAdmin 有個小小的遺憾。如果您的 Model 有一些欄位,希望在建立資料時,允許使用者可以輸入資料,而日後編輯時,只能讀取。那預設的 ModelAdmin 可能幫不上忙。所以,我寫了一個 EditLockModelAdmin:
class EditLockModelAdmin(admin.ModelAdmin): editlock_fields = [] def get_form(self, request, obj = None, **kwargs): form = super(EditLockModelAdmin, self).get_form(request, obj, **kwargs) if obj: fields = form.base_fields for field in self.editlock_fields: if not field in fields: continue fields[field].required = False fields[field].widget.attrs['disabled'] = 'disabled' return form def save_form(self, request, form, change): if change: exclude = getattr(form._meta, 'exclude', []) for editlock_field in self.editlock_fields: if not editlock_field in exclude: exclude.append(editlock_field) form._meta.exclude = exclude return super(EditLockModelAdmin, self).save_form(request, form, change)
有興趣的朋友,可以試試看~~ :)
這篇內容的 Trackback 網址:
http://www.cdchen.idv.tw/trackback/987
- cdchen 的 BLOG
- 如果想要發表回應,請先登入 或 註冊。