如何向存储在数据库中的Django字段添加其他描述?

时间:2010-11-24 14:39:52

标签: django django-models django-forms

我想为表单中的输入字段提供上下文帮助(“名字”:“你的名字。如果你有几个,请输入所有这些。”)。我不想在源代码中对它们进行硬编码,而是希望通过管理界面使这些帮助文本可编辑。我的想法是以某种方式扩展字段类(包括类似于verbose_name的新属性)并将其存储在数据库中(可能是三列表'Model,Field,Help'就足够了。)

但是,我不知道这是否可行或以前是否已经完成。你呢?如果不是,你可以给我一些从哪里开始吗?

1 个答案:

答案 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(如果未定义)的函数并使用当前帮助文本更新自身,为您创建表单的所有模型自动化此过程可能是有意义的。被初始化......