2

この特定の管理ページでは、「現在の値」(赤い円で囲まれている) を、この特定のオブジェクトの管理ページに戻るリンクに変えたいと思います。

しかし、この変更を行う場所が見つかりません。これがどのように表示されるかをどうにかしてオーバーライドする必要があることは知っていますが、わかりません。

やりたいことをするために何をオーバーライドする必要がありますか?

現在の管理インターフェース

管理モデルの定義:

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ありません。Include another FW Config - BASE:IBM-HS22/HS22V

デバッガーで調べましたが、変更したい特定のラベルに到達する方法がわかりません。

4

2 に答える 2

1

インライン管理モデルには、カスタム テンプレートを提供するために使用できるtemplate プロパティがあります。そこから、コードを変更して URL を追加する必要があります。

于 2012-05-01T00:46:32.307 に答える
1

クラス属性の値として設定ModelFormするモデルのカスタムを提供する必要があります。FirmwareConfigElementsFirmwareConfigElementsChoiceInline.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

ここで、ユーザーがフォーム データを変更したときにラベルを動的に変更したい場合、これはかなり見苦しく、JavaScript メディアを参照して上記をその場で実行する必要があります。

于 2012-05-01T11:32:06.310 に答える