2012-04-30 2 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

関連する問題