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

Django Admin:在运行时将文本添加到字段旁边,django,django-admin,Django,Django Admin,我想在django管理界面的字段旁边添加一个文本 需要在运行时在python方法内创建警告。我很了解python和django ORM,但我不知道如何获取字段旁边的文本 文本应该是一个警告。在clean()中引发ValidationError不是解决方案,因为 用户无法再编辑该页。这应该只是一条警告消息。我认为最简单的方法是覆盖该模型的特定管理页面。Django文档对此进行了描述。您需要覆盖的模板可能是change\u form.html。在这些模板中,显示的对象在模板变量original中可用

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

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

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

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

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


编辑:查看
contrib/admin/templates/admin/change\u form.html
有一个include for
includes/fieldset.html
,显示管理站点的字段。您可以在那里放置一些代码,以检查模型是否具有某些特殊的命名属性,如果是,则显示该属性。您可以简单地用您的自定义模型覆盖所有模型的
change\u form.html

如果您想在changelist视图中执行此操作,您可以在model方法中编写,该方法以您想要的格式返回字符串,并将该方法的名称放在admin的列表显示中

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',)
类MyModel(models.Model):
myfield=models.CharField(最大长度=100)
def myfield_带有警告(自):
返回“%s-%s%”(self.myfield,“我的警告消息”

) myfield_with_warning.short_description='我的字段详细名称' myfield_带有警告。allow_tags=True 类MyModelAdmin(models.ModelAdmin): 列表\显示=('myfield\带有\警告',)

如果它不是您需要的,请更准确地写下您希望在何处显示警告消息。

您可以为管理员使用自定义的
ModelForm
子类,在相关字段初始化时为其添加
help\u 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", )
#forms.py
将YourModelForm分类(forms.ModelForm):
定义初始化(self,*args,**kwargs):
super(您的模型表单,self)。\uuuuu初始值(*args,**kwargs)
self.fields['field\u in\u question'].help\u text=generate\u warning()
#管理员
类YourModelAdmin(admin.ModelAdmin):
form=forms.YourModelForm
#在这里,您可以指定定制CSS/JS,这将使
#该特定字段的“help_text”看起来像一个警告。
#或者你可以让它成为通用的——比如说,样式(或者重新定位w/js)所有标记
#在任何字段的帮助文本中都会出现类似的情况。
班级媒体:
css={“all”:(“admin_warning.css”,)}
js=(“admin_warning.js”,)

是否要在django admin中显示的列表中添加文本?例如model.text value和其他一些文本?我希望在change_form(编辑模型实例)页面上显示警告。部分“字段旁边”对我来说很重要。使用您建议的解决方案在页面顶部添加一些消息非常容易。但我想在输入字段旁边获得警告。使用css+js将其移动到那里不是一个解决方案。我找不到可以在“includes/fieldset.html”中覆盖的块。我不想复制整个fieldset.html文件,只是为了修改y一行。我想自己的ModelAdminForm更好。谢谢。我在帮助文本中设置了一个带有类errornote的div,得到了我想要的。构造函数中的下划线太多了。