我想在django管理界面的字段旁边添加文本。
警告需要在python方法中动态创建。我很熟悉python和django ORM,但不知道如何获取字段旁边的文本。
文本应该是一个警告。在clean()中引发ValidationError不是解决方案,因为用户无法再编辑页面。它应该只是一个警告消息。
我想在django管理界面的字段旁边添加文本。
警告需要在python方法中动态创建。我很熟悉python和django ORM,但不知道如何获取字段旁边的文本。
文本应该是一个警告。在clean()中引发ValidationError不是解决方案,因为用户无法再编辑页面。它应该只是一个警告消息。
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", )
如果您想在变更列表视图中实现此功能,可以编写模型方法,该方法返回您想要的格式的字符串,并将该方法的名称放入管理界面的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',)
我认为最简单的方法是覆盖特定模型的管理页面。在Django文档中这里有描述。您需要覆盖的模板可能是change_form.html
。在此模板中,显示的对象可以在模板变量original
中使用。
我会为您的模型添加一个生成并返回错误消息的方法或属性,并从模板调用此方法。
编辑:看一下contrib/admin/templates/admin/change_form.html
,其中包含includes/fieldset.html
的引用,用于显示管理站点的字段。您可以在那里放置一些代码来检查模型是否具有某些特殊命名的属性,如果有,则显示该属性。然后,您可以为所有模型简单地覆盖带有自定义模型的change_form.html
。