我正在使用django-widget-tweaks
及其render_field
。我有一个奇怪的情况,我想知道是否应该使用替代方法或其他方法?
我正在使用django
和allauth
(我还没有使用社交认证部分)。我有默认的django用户模型,并且有一个扩展用户模型的“个人资料”模型。都可以了
这是一个专门的“会员应用程序”。只有18岁以上的成年人才能登录。登录后,一个人可以创建“成员”一个或多个“成员”记录。登录的人负责支付会员资格,但本身可能不是会员。例如,父母可能会登录并创建18岁以下青少年的会员记录,而自己本身不是会员。
在创建新的成员记录时,我需要给已登录的用户一个创建自己的成员记录的机会(如果他们还没有)。如果他们选择此选项,则登录用户的“个人资料”信息应自动填写新的会员表单。为此,我捕获并序列化了登录用户的个人资料信息,并将其传递给CBV MemberCreate
方法。此方法使用django-widget-tweaks
及其render_field
方法la:
{% 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
似乎不明白这一点,在django的世界中,我不够明智,无法知道解决方法。
我可以听到有人键入:“但是您知道{% with ... %}
构造中的字段名称”。是的,的确如此,但是“成员”表单具有很多字段,因此我将render_field
部分包裹在一个include
的小型html文件中。因此,上面的reall段可能看起来像:
{% with field=profileForm.first_name %}
<div class="form-group col col-3">
{% include "Members/template_includes/field_render.html" %}
</div>
{% endwith %}
包含的文件中包含render_field
。在包含的html文件中,我不知道该字段的名称。
想法?
修改
我在下面尝试了Pankaj的建议,但是
{% 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处理它。
答案 0 :(得分: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 %}
还有任何疑问让我知道