2

对于这个特定的管理页面,我想将“当前值”(用红色圆圈标出)变成一个链接,该链接可以返回到该特定对象的管理页面。

但我找不到去哪里做这个改变。我知道我需要以某种方式覆盖它的显示方式,但我无法弄清楚。

我需要重写什么来做我想做的事?

当前管理界面

管理模型定义:

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

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

使用 Filip 的巨大帮助,我得到了这个:

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

内联管理模型有一个模板属性,您可以使用它来提供自定义模板。从那里,您需要修改代码以添加 url。

于 2012-05-01T00:46:32.307 回答
1

您需要为ModelForm模型提供一个自定义FirmwareConfigElements,将其设置为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

现在,如果您希望标签随着用户更改表单数据而动态更改,那么它会变得更加丑陋,您将不得不求助于引用 JavaScript 媒体并即时执行上述操作。

于 2012-05-01T11:32:06.310 回答