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',}),
        }
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 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))


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

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

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