Задать вопрос
ksenofobius
@ksenofobius
Люблю долбить по клавишам

Как правильно вставить кастомный html код между полями формы (modelform)?

У меня есть форма, унаследованная от ModelForm. В ней есть поле с определенным именем (к примеру пусть будет name) как правильно вставить после него мой html код? Например чтобы в шаблоне выглядело примерн так:
field1
field2
name_field
link
...
field_N
Из вариантов у меня получилось только проверят имя поля при рендеринге формы в цикле, и если имя совпадает с 'name' вставлять свой код. Но как мне кажется это некорректный вариант. Если же я добавляю свою функцию внутри класса (как бы я сделал в admin.py для добавления кастомного кода) и делаю его readonly, то мне пишет что данное поле не найдено. Существуют ли варианты добавить мое псевдо поле в форму, или как бы было правильно это реализовать?
Я пытался сделать что-то вроде такого:
class Data(ModelForm):
    class Meta:
        def my_tag(self):
               return "<hr>"
        model = PersonalInfo
        fields = ('last_name', 'my_tag', 'first_name', )
        widgets = {
            'last_name': TextInput(attrs={'class': 'fio form-control',}),
            'first_name': TextInput(attrs={'class': 'fio form-control',}),
        }
  • Вопрос задан
  • 93 просмотра
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Django: создание backend-приложений
    7 недель
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@latush
Как вариант - написать свой виджет для name_field, который будет выводить нужный html
что-то типа
class TextInputWithOpts(forms.TextInput):
    
    def __init__(self, attrs={}):
        super(TextInputWithOpts, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        output = []
        output.append(super(TextInputWithOpts, self).render(name, value, attrs))
        if value and hasattr(value, 'optional_html'):
            output.append(value)        
        return mark_safe(u''.join(output))


как-то так, примерно (не проверял, но копать в эту сторону)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы