django-widget-tweaks использует field.name в render_field

Я использую django-widget-tweaks И его render_field, У меня странная ситуация, и мне интересно, есть ли обходной путь или другой подход, который я должен использовать?

я использую django а также allauth (Я еще не использую социальную аутентификацию). У меня есть пользовательская модель django по умолчанию, и у меня есть модель "Профиль", которая расширяет пользовательскую модель. Это все работает.

Это специализированное приложение "Членство". Только взрослые старше 18 лет должны иметь возможность войти в систему. После входа в систему человек может создавать "член" одну или несколько "член" записей. Зарегистрированный пользователь несет ответственность за оплату членства, но не может быть участником самостоятельно; например, родитель может войти в систему и создать записи об участниках для молодежи до 18 лет, не будучи самим участником.

При создании новой записи участника мне нужно дать вошедшему в систему человеку возможность создать запись участника для себя (если у него ее еще нет). Если они выбрали эту опцию, то информация о профиле зарегистрированного пользователя должна автоматически заполнять форму нового участника. Чтобы облегчить это, я собираю и сериализирую информацию в профиле зарегистрированного пользователя и передаю ее в CBV. MemberCreate метод. Этот метод отображает форму Member Create, используя django-widget-tweaks И его render_field метод а-ля:

{% with field=newMemberForm.first_name %}
    {% render_field field class="form-control form-control-sm" %}
{% endwith %}

Я хочу создать data-loggedindata= атрибут, который использует field.name значение в качестве "имени члена" профиля пользователя, вошедшего в систему. Что-то вроде:

{% with field=newMemberForm.first_name %}
    {% render_field field class="form-control form-control-sm" data-loggedindata=LoggedInProfile.{{field.name}} %}
{% endwith %}

Но django-widget-tweaks кажется, не понимает этого, и я не достаточно мудр в мире джанго, чтобы знать обходной путь.

Я слышу, как кто-то печатает: "но вы знаете имя поля из {% with ... %} конструкция ". Да, это правда, но форма участника имеет много полей, поэтому я обернул render_field часть в небольшом HTML-файле, который я include, Таким образом, приведенный выше сегмент может выглядеть так:

{% with field=profileForm.first_name %}
    <div class="form-group col col-3">
        {% include "Members/template_includes/field_render.html" %}
    </div>
{% endwith %}

И включенный файл имеет render_field в этом. Внутри этого HTML-файла я понятия не имею, как называется поле.

идеи?

редактировать

Я попробовал предложение Панкаджа ниже, но

{% render_field field|attr:"data-loggedindata=LoggedInProfile.{{field.name}}" %}

не кажется, чтобы интерполировать объект LoggedInProfile или {{field.name}} значение. Я получаю неинтерполированную строку "LoggedInProfile.{{Field.name}}".

Я пытался:

{% render_field field|attr:"data-loggedindata:getattr(LoggedInProfile, field.name" %}

но это тоже не интерполируется. Есть ли способ в шаблоне Django и / или твиках-виджетах программно получить значение атрибута объекта?

Редактировать 2

Я решил пойти другим путем. Я все еще использую widget-tweaks но я не пытаюсь использовать render_field таким образом больше. Я сериализирую данные, которые будут помещены в data- элементы и размещение версии JSON в скрытом поле формы. Я позволяю JavaScript разобраться с этим сейчас.

1 ответ

Если вы хотите добавить атрибут в поле с django-widget-tweaks Вы можете просто использовать attr для этого, в вашем случае это будет похоже на -

{% with field=newMemberForm.first_name %}
    {% render_field field|add_class:"form-control form-control-sm"|attr:"data-loggedindata=LoggedInProfile.{{field.name}}" %}
{% endwith %}

Все еще есть сомнения, дайте мне знать

Другие вопросы по тегам