我想为表单中的输入字段提供上下文帮助(“名字”:“你的名字。如果你有几个,请输入所有这些。”)。我不想在源代码中对它们进行硬编码,而是希望通过管理界面使这些帮助文本可编辑。我的想法是以某种方式扩展字段类(包括类似于verbose_name
的新属性)并将其存储在数据库中(可能是三列表'Model,Field,Help'就足够了。)
但是,我不知道这是否可行或以前是否已经完成。你呢?如果不是,你可以给我一些从哪里开始吗?
答案 0 :(得分:4)
表单中的每个字段都已包含help_text
,但它应在Form类中声明为字段中的参数。
,例如,
class SomeForm(forms.Form):
some_field1 = forms.CharField(verbose_name="Some Field 1", max_length=100, help_text="Please the first field.")
some_field2 = forms.CharField(verbose_name="Some Field 2", max_length=100, help_text="Please the second field.")
就个人而言,我没有看到在数据库中使用它的好处,而不是与该领域相关的形式。
编辑:
因此您可以覆盖帮助文本。让我们首先假设您想要在表单中覆盖help_text的每个表单都有一个字典。在渲染Context之前,您可以使用字典重新处理表单:
my_form = SomeForm()
for field_name, new_help_text in my_form_override_help_text_dict.items():
my_form.fields[field_name].help_text = new_help_text
然后在渲染之前将my_form添加到上下文中。
现在您可以选择存储帮助文本的位置和方式;例如,你创建一个包含三个字段(模型名称,字段名称,帮助文本)的ModelFieldHelp的解决方案是可行的,那么你需要像
这样的东西class ModelHelpField(models.Model):
model_name = CharField(max_length=50)
field_name = CharField(max_length=50)
new_help_text = CharField(max_length=50)
field_help_qs= ModelHelpField.objects.filter(model_name='SomeModel')
my_form_override_help_text_dict = dict([(mfh.field_name, mfh.new_help_text) for mfh in field_help_qs])
现在,通过在表单或模型中定义自动创建这些ModelHelpFields(如果未定义)的函数并使用当前帮助文本更新自身,为您创建表单的所有模型自动化此过程可能是有意义的。被初始化......