如何自定义Django表单小部件? - Django

2 投票
2 回答
1186 浏览
提问于 2025-04-15 22:20

我遇到了一点小问题!


我发现有一种被大家普遍接受的方法,可以用来定制Django后台的字段。

from django import forms
from django.utils.safestring import mark_safe

class AdminImageWidget(forms.FileInput):
    """
    A ImageField Widget for admin that shows a thumbnail.
    """

    def __init__(self, attrs={}):
        super(AdminImageWidget, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        output = []
        if value and hasattr(value, "url"):
            output.append(('<a target="_blank" href="%s">'
                           '<img src="%s" style="height: 28px;" /></a> '
                           % (value.url, value.url)))
        output.append(super(AdminImageWidget, self).render(name, value, attrs))
        return mark_safe(u''.join(output))

我需要访问模型中的其他字段,以便决定如何显示这个字段!

举个例子:

假设我在记录一个值,我们称之为销售额

如果我想根据另一个字段来定制销售额的显示方式,我们称这个字段为转化率

但是,当我想要修改销售额的显示方式时,似乎没有直接的方法可以访问转化率这个字段!


如果有人能提供解决办法,我将非常感激!谢谢 :)

2 个回答

1

你可能想要为管理后台使用一个自定义表单

1

你说得对,这些小部件本身是独立的。我想到的一个更复杂的做法是,提供一个自定义的管理模板来实现你想要的功能,或者传入一段JavaScript代码来处理那些相互关联的字段(就像预填充字段的工作方式一样)。

撰写回答