是否有一個很好的方式將定製項添加到子類ModelAdmin字段集,即讓它保留所有的默認值和只是一些額外的。django擴展ModelAdmin字段集並保持默認值
(我知道我可以添加所有默認回到我自己,但希望的是更好的方式)
是否有一個很好的方式將定製項添加到子類ModelAdmin字段集,即讓它保留所有的默認值和只是一些額外的。django擴展ModelAdmin字段集並保持默認值
(我知道我可以添加所有默認回到我自己,但希望的是更好的方式)
未經測試,但可能工作:
class MyAdmin(BaseAdmin):
fieldsets = BaseAdmin.fieldsets + (...)
這(如果它的工作原理)添加繼承後的其他字段集。
您可以覆蓋get_fieldsets ModelAdmin的方法。
默認的實現看起來是這樣的:
def get_fieldsets(self, request, obj=None):
"Hook for specifying fieldsets for the add form."
if self.declared_fieldsets:
return self.declared_fieldsets
form = self.get_form(request, obj)
fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj))
return [(None, {'fields': fields})]
所以,你可以覆蓋它,例如像這樣:
class MyCustomAdmin(ModelAdmin):
def get_fieldsets(self, request, obj=None):
fs = super(MyCustomAdmin, self).get_fieldsets(request, obj)
# fs now contains [(None, {'fields': fields})], do with it whatever you want
all_fields = fs[0][1]['fields']
return fs
這裏是延伸自定義的ModelAdmin類,並增加額外的字段集的一個例子。
注意我第一次嘗試這個時,我忽略了「如果不是......」檢查。每次我刷新頁面時,頁面上都會重複額外的部分。
class GISDataFileAdmin(admin.ModelAdmin):
# abbreviated version of detailed fieldsets (one fieldset named 'Datafile Info')
fieldsets = [('DataFile Info', {\
'fields': ('datafile_id', 'datafile_label', 'datafile_version')\
}),]
class ShapefileSetAdmin(GISDataFileAdmin):
# extend fieldsets in GISDataFileAdmin
def get_fieldsets(self, request, obj=None):
# get fieldset(s) from GISDataFileAdmin
#
fs = super(ShapefileSetAdmin, self).get_fieldsets(request, obj)
# pull out the fieldset name(s) e.g. [ 'DataFile Info']
#
section_names = [ x[0] for x in fs if x is not None and len(x) > 0 and not x[0] == '']
# check if new fieldset info has been added
# if not, add the new fieldset
#
if not 'Shapefile Info' in sections_names:
# Add new info as the top fieldset
fs = [ ('Shapefile Info', {
'fields': ('name', ('zipfile_checked', 'has_shapefile'))
})] + fs
return fs
BaseAdmin.fieldsets在此處爲空。 – second 2010-08-21 12:31:42