2011-06-10 109 views
3

我想在django管理界面的字段旁边添加文本。Django Admin:在运行时在字段旁边添加文本

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

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

+0

你想添加列表中显示的文本在Django管理?例如model.text的值和其他文字? – Efazati 2011-08-24 08:55:30

+0

我想在change_form(在编辑模型实例)页面中发出警告。 – guettli 2012-01-25 14:36:24

回答

5

您可以为管理员使用自定义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",) 
+0

谢谢。我在help_text上设置了带classnote的div,并获得我想要的内容。 – guettli 2011-08-31 07:41:46

+0

构造函数中有一个下划线太多。 – Arahman 2012-03-16 10:23:53

0

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

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

编辑:看看contrib/admin/templates/admin/change_form.html有一个包含includes/fieldset.html的显示管理网站的字段。如果模型具有一些特殊的命名属性,并且如果显示,则可以在其中放置一些代码。你可以简单地用你的自定义模型覆盖所有型号的change_form.html

+0

“旁边的领域”对我来说很重要。使用您建议的解决方案在页面顶部添加一些消息是相当容易的。但我想在输入字段旁边看到警告。用css + js移动它并不是一个解决方案。 – guettli 2011-08-25 13:21:53

+0

我已经更新了答案。 – 2011-08-26 07:39:15

+0

我找不到可在'includes/fieldset.html'中覆盖的块。我不想复制整个fieldset.html文件,只是修改一行。我想自己的ModelAdminForm更好。 – guettli 2011-08-29 07:53:51

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',) 

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

相关问题