2015-10-16 71 views
1

我有一個ModelForm添加鏈接的ModelAdmin

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,那麼它會導致錯誤。

第二個主要問題:如何添加一些鏈接到其他ModelAdmin

+0

我不認爲你正在展示足夠的信息。當你將'method_config'添加到'list_display'時,你期待什麼?你想在哪裏顯示鏈接,以及你想鏈接到什麼地方? – Alasdair

+0

@Alasdair,'method_config'應顯示尚未編寫的新ModelAdmin的鏈接。 – rva4

+0

取決於object.name – rva4

回答

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 
+0

'method_config'不是模型場 – rva4

+0

如果你想從django.core.urlresolvers產生的URL地址,以一定的模型視圖,嘗試'導入已reverse''逆轉(「它不顯示任何內容 – rva4

+0

管理員:{{app_label}} _ {{MODEL_NAME}} _添加「)'檢查[Django管理站點文檔(https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#reversing-admin-urls)的所有可用路由。 – pista329