Django Admin:在字段旁边的运行时添加文本

时间:2011-06-10 08:59:58

标签: django django-admin

我想在django管理界面的字段旁边添加一个文本。

警告需要在运行时在python方法中创建。我很了解python和django ORM,但我不知道如何在该字段旁边获取文本。

该文字应该是一个警告。在clean()中引发ValidationError不是解决方案,因为 用户无法再编辑该页面。它应该只是一个警告信息。

3 个答案:

答案 0 :(得分:6)

您可以为admin使用自定义ModelForm子类,在初始化时为相关字段添加help_text属性,并对其进行相应的样式设置。

# forms.py

class YourModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(YourModelForm, self).__init__(*args, **kwargs)
        self.fields['field_in_question'].help_text = generate_warning()

# admin.py

class YourModelAdmin(admin.ModelAdmin):
    form = forms.YourModelForm

    # And here you can specify custom CSS / JS which would make
    # `help_text` for that particular field look like a warning.
    # Or you can make it generic--say, style (and maybe reposition w/js) all tags
    # like <span class="warning"> that occur within the help text of any field.

    class Media:
        css = {"all": ("admin_warning.css", )}
        js = ("admin_warning.js", )

答案 1 :(得分:0)

我认为最简单的方法是覆盖该模型的特定管理页面。这在Django文档中描述了here。您需要覆盖的模板可能是change_form.html。在这些模板中,显示的对象在模板变量original中可用。

我会向您的模型添加方法或属性,生成并返回错误消息并从模板中调用此方法。

编辑:看一下contrib/admin/templates/admin/change_form.html includes/fieldset.html的包含显示管理网站字段的内容。如果模型具有一些特殊的命名属性,那么你可以在那里添加一些代码,如果是,则显示它。您可以使用自定义模型覆盖所有模型的change_form.html

答案 2 :(得分:0)

如果你想在更改列表视图中执行此操作,可以使用模型方法编写,该方法以您希望的格式返回字符串,并将该方法的名称放在admin中的list_display中。

class MyModel(models.Model):
    myfield = models.CharField(max_length=100)

    def myfield_with_warning(self):
       return '%s - %s' % (self.myfield, '<span class="warn">My warning message</p>'
    myfield_with_warning.short_description = 'My field verbose name'
    myfield_with_warning.allow_tags = True

class MyModelAdmin(models.ModelAdmin):
    list_display = ('myfield_with_warning',)

如果不是您需要的,请更准确地写一下,您想在哪里显示警告信息。