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 %}
Все еще есть сомнения, дайте мне знать