Как добавить дополнительное описание в поле Django, которое будет храниться в базе данных? - PullRequest
3 голосов
/ 24 ноября 2010

Я хотел бы предоставить контекстную помощь для полей ввода в моих формах («Имя»: «Ваше имя. Пожалуйста, введите все из них, если их несколько.»).Вместо того, чтобы жестко кодировать их в исходном коде, я хотел бы сделать эти справочные тексты редактируемыми через интерфейс администратора.Моя идея состоит в том, чтобы как-то расширить класс поля (включить новый атрибут, похожий на verbose_name) и сохранить его в базе данных (вероятно, достаточно таблицы из трех столбцов «Модель, поле, справка»).

Однако я не знаю, возможно ли это или было сделано раньше.Вы?Не могли бы вы дать мне, с чего начать, если это не так?

1 Ответ

4 голосов
/ 24 ноября 2010

Каждое поле в форме уже содержит 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 в форме.Перед рендерингом контекста вы можете повторно обработать форму со словарем следующим образом:

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 (если они не определены) и обновляет себя текущим текстом справки после инициализации ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...