【发布时间】:2019-04-01 07:42:21
【问题描述】:
我正在使用django-widget-tweaks 及其render_field。我遇到了一个奇怪的情况,我想知道是否应该使用解决方法或不同的方法?
我正在使用django 和allauth(我还没有使用社交身份验证部分)。我有默认的 django 用户模型,并且我有一个扩展用户模型的“配置文件”模型。这一切都在工作。
这是一个专门的“会员应用程序”。只有 18 岁以上的成年人才能登录。一旦登录,一个人可以创建“会员”一个或多个“会员”记录。登录的人负责支付会员费,但自己可能不是会员;例如,父母可能登录并为 18 岁以下的青少年创建会员记录,而他们自己不是会员。
创建新成员记录时,我需要让登录的人有机会为自己创建成员记录(如果他们还没有)。如果他们选择此选项,则登录人的“个人资料”信息应自动填写新会员表格。为了促进这一点,我正在捕获和序列化登录用户的个人资料信息,并将其传递给 CBV MemberCreate 方法。此方法使用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 似乎并不理解这一点,而且我在 django 的世界中还不够聪明,无法知道解决方法。
我可以听到有人在输入:“但你知道 {% with ... %} 构造中的字段名称”。是的,这是真的,但是成员表单有很多字段,所以我将render_field 部分包装在一个我include 的小html 文件中。所以上面的真实部分可能看起来像:
{% 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 处理它。
【问题讨论】:
标签: django django-widget-tweaks