2012-04-30 106 views
2

對於這個特定的管理頁面,我想將'當前值'(用紅色圓圈表示)轉換爲返回到此特定對象的管理頁面的鏈接。在TabularInline中修改元素的表示

但是我找不到要去做什麼改變。我知道我需要重寫這個 如何顯示,但我無法弄清楚。

我需要重寫以做我想做的事情?

current admin interface

管理模型定義:

class FirmwareConfigElementsChoiceInline(admin.TabularInline): 
    model = FirmwareConfigElements 
    extra = 1 

class FirmwareConfigAdmin(admin.ModelAdmin): 
    save_as = True 
    list_display = ('name', 'description') 
    inlines = [FirmwareConfigElementsChoiceInline] 

使用菲利普的巨大幫助,我已經得到了這一點:

class FirmwareConfigElementsForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     klass = FirmwareConfigElementsForm 
     super(klass, self).__init__(*args, **kwargs) 

     if self.instance.type == 'incfw': 
      value = self.instance.value 
      url = '#' # TODO: get the URL for the value 
      hyperlink = '<a href="%s">%s</a>' % (url, value) 
      label = self.fields['type'].label.replace(value, hyperlink) 
      self.fields['type'].label = label 

但在上面的代碼中,self.fields['type'].label有內容Type而不是我期待的3210。

我已經在調試器中探索過它,但我無法弄清楚如何到達要更改的特定標籤。

回答

1

行內管理員模型有template property您可以用來提供自定義模板。從那裏,你需要修改代碼來添加url。

1

您需要爲FirmwareConfigElements模型提供自定義ModelForm模型,該模型將被設置爲FirmwareConfigElementsChoiceInline.form類屬性的值。

這裏,你會想覆蓋ModelForm.__init__()實例方法分配一個新的標籤要覆蓋的領域,如果窗體綁定:現在

class FirmwareConfigElementsForm(models.ModelForm): 
    def __init__(self, *args, **kwargs): 
     klass = FirmwareConfigElementsForm 
     super(klass, self).__init__(*args, **kwargs) 

     if form.is_bound and 'value' in self.data: 
      value = self.data['value'] 
      url = '' # TODO: get the URL for the value 
      hyperlink = '<a href="%s">%s</a>' % (url, value) 
      label = self.fields['type'].label.replace(value, hyperlink) 
      self.fields['type'].label = label 


class FirmwareConfigElementsChoiceInline(admin.TabularInline): 
    model = FirmwareConfigElements 
    extra = 1 
    form = FirmwareConfigElementsForm 

,如果你想在標籤動態改變隨着用戶更改表單數據,它會變得更加醜陋,您將不得不求助於referencing JavaScript media並在飛行中執行上述操作。

+0

我已經更新了我的問題 - 您的答案似乎是正確的方向,但還沒有完成。 – MikeyB