我有[arrayOfLayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)];
:
ModelForm
和class SomeModelForm(forms.ModelForm):
class Meta:
model = SomeModel
def __init__(self, *args, **kwargs):
super(ApiBackendConfigForm, self).__init__(*args, **kwargs)
if kwargs['instance'].name == u'Some_name':
self.fields['method_config'] = forms.URLField()
:
ModelAdmin
第一个问题,class SomeAdmin(admin.ModelAdmin):
form = SomeModelForm
list_display = ('name', 'alias', 'is_enabled', )
list_editable = ('is_enabled', )
readonly_fields = ('name', 'alias', )
字段未显示。我知道,它不在method_config
,但如果我将其添加到list_display
,则会导致错误。
第二个主要问题:如何向其他list_display
添加一些链接?
答案 0 :(得分:0)
修改self.fields
可能不是线程安全的。这意味着如果您在第一次请求时修改self.fields,则所有其他请求都将获得该修改后的版本。
检查ModelAdmin.get_fields(request, obj=None)方法,以便更改即时显示的字段。适用于changeview中的表单。如果要在更改列表视图中显示自定义字段,只需修改list_display wih方法名称而不是字段。
例如:
class SomeAdmin(admin.ModelAdmin):
list_display = ('name', 'alias', 'is_enabled', 'show_method_config', )
list_editable = ('is_enabled', )
readonly_fields = ('name', 'alias', )
def show_method_config(self,obj):
return getattr(obj,"method_config","") if obj.name == u"Some_name" else ""
show_method_config.short_description = _(u"Method config")
show_method_config.admin_order_field = "method_config"
show_method_config.allow_tags = True
def get_fields(self, request, obj=None):
fields = super(SomeAdmin, self).get_fields(request, obj)
if obj and obj.name == u"Some_name":
fields.append("method_config")
return fields