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 URL for this post:
http://www.cdchen.idv.tw/trackback/987
- cdchen 的 BLOG
- 如果想要發表回應,請先登入 或 註冊。