我想在django管理界面的字段旁边添加一个文本。
警告需要在运行时在python方法中创建。我很了解python和django ORM,但我不知道如何在该字段旁边获取文本。
该文字应该是一个警告。在clean()中引发ValidationError不是解决方案,因为 用户无法再编辑该页面。它应该只是一个警告信息。
答案 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',)
如果不是您需要的,请更准确地写一下,您想在哪里显示警告信息。